Prévenir les erreurs "No Such File or Directory"
Maintenant que vous savez comment dépanner ces erreurs, explorons les meilleures pratiques pour les empêcher de se produire en premier lieu.
Meilleure pratique 1 : Utiliser des chemins absolus pour les scripts
Lors de l'écriture de scripts ou de commandes qui seront exécutés à partir de différents emplacements, utilisez des chemins absolus :
Créons un script simple qui utilise des chemins absolus :
cd ~/project
nano absolute_path_script.sh
Ajoutez le contenu suivant au script :
#!/bin/bash
echo "Lecture du fichier en utilisant un chemin absolu:"
cat /home/labex/project/documents/reports/monthly_report.txt
Enregistrez le fichier en appuyant sur Ctrl+O, puis sur Entrée, et quittez avec Ctrl+X.
Rendez le script exécutable :
chmod +x absolute_path_script.sh
Exécutez le script :
./absolute_path_script.sh
Sortie :
Lecture du fichier en utilisant un chemin absolu:
This is a sample report
Le script fonctionne car il utilise un chemin absolu, quel que soit l'endroit où il est exécuté.
Meilleure pratique 2 : Vérifier si les fichiers/répertoires existent avant de les utiliser
Créez un autre script qui vérifie si un fichier existe avant de tenter de l'utiliser :
nano file_check_script.sh
Ajoutez le contenu suivant :
#!/bin/bash
FILE="/home/labex/project/documents/reports/monthly_report.txt"
NONEXISTENT_FILE="/home/labex/project/documents/reports/quarterly_report.txt"
## Check if file exists before using it
if [ -f "$FILE" ]; then
echo "File exists, reading content:"
cat "$FILE"
else
echo "Error: $FILE does not exist"
fi
## Check for non-existent file
if [ -f "$NONEXISTENT_FILE" ]; then
cat "$NONEXISTENT_FILE"
else
echo "The file $NONEXISTENT_FILE does not exist"
echo "Creating it now..."
echo "This is a quarterly report" > "$NONEXISTENT_FILE"
echo "File created successfully"
fi
Enregistrez et quittez (Ctrl+O, Entrée, Ctrl+X).
Rendez le script exécutable :
chmod +x file_check_script.sh
Exécutez le script :
./file_check_script.sh
Sortie :
File exists, reading content:
This is a sample report
The file /home/labex/project/documents/reports/quarterly_report.txt does not exist
Creating it now...
File created successfully
Vérifiez que le nouveau fichier a été créé :
cat documents/reports/quarterly_report.txt
Sortie :
This is a quarterly report
Meilleure pratique 3 : Organiser vos fichiers de manière logique
Une structure de fichiers bien organisée permet d'éviter les erreurs. Créons une structure plus organisée pour un nouveau projet :
mkdir -p ~/project/new_project/{src,docs,config,data}
Cela crée un répertoire avec quatre sous-répertoires en une seule commande.
Vérifiez la structure :
ls -la ~/project/new_project/
Sortie :
total 20
drwxr-xr-x 6 labex labex 4096 Jan 1 00:00 .
drwxr-xr-x 5 labex labex 4096 Jan 1 00:00 ..
drwxr-xr-x 2 labex labex 4096 Jan 1 00:00 config
drwxr-xr-x 2 labex labex 4096 Jan 1 00:00 data
drwxr-xr-x 2 labex labex 4096 Jan 1 00:00 docs
drwxr-xr-x 2 labex labex 4096 Jan 1 00:00 src
Créez un fichier README dans la racine du projet pour documenter la structure :
cat > ~/project/new_project/README.txt << EOF
Project Directory Structure:
- src/: Source code files
- docs/: Documentation
- config/: Configuration files
- data/: Data files
EOF
Affichez le README :
cat ~/project/new_project/README.txt
Sortie :
Project Directory Structure:
- src/: Source code files
- docs/: Documentation
- config/: Configuration files
- data/: Data files
EOF
Meilleure pratique 4 : Utiliser des variables d'environnement pour les chemins courants
Les variables d'environnement peuvent aider à gérer les chemins de manière plus cohérente :
nano ~/.zshrc
Ajoutez ces lignes à la fin du fichier :
## Project directories
export PROJECT_ROOT=~/project
export DOCS_DIR=$PROJECT_ROOT/documents
export REPORTS_DIR=$DOCS_DIR/reports
Enregistrez et quittez (Ctrl+O, Entrée, Ctrl+X).
Appliquez les modifications :
source ~/.zshrc
Vous pouvez maintenant utiliser ces variables dans les commandes :
echo "Accessing report using environment variable:"
cat $REPORTS_DIR/monthly_report.txt
Sortie :
Accessing report using environment variable:
This is a sample report
Créez un script qui utilise ces variables d'environnement :
nano env_var_script.sh
Ajoutez le contenu suivant :
#!/bin/bash
echo "Reports directory is: $REPORTS_DIR"
echo "Files in reports directory:"
ls -la $REPORTS_DIR
Enregistrez, quittez et rendez exécutable :
chmod +x env_var_script.sh
Exécutez le script :
./env_var_script.sh
Sortie :
Reports directory is: /home/labex/project/documents/reports
Files in reports directory:
total 8
drwxr-xr-x 2 labex labex 4096 Jan 1 00:00 .
drwxr-xr-x 5 labex labex 4096 Jan 1 00:00 ..
-rw-r--r-- 1 labex labex 22 Jan 1 00:00 monthly_report.txt
-rw-r--r-- 1 labex labex 25 Jan 1 00:00 quarterly_report.txt