Bash hacks
Table des matières
Je passe la majeure partie de mon temps de travail dans un terminal. Dans ce terminal, j’utilise l’interpréteur de commande bash
. Et, bien que je trouve cela généralement plus intuitif que les clicodromes, il reste quelque recoins sombres que je continue à oublier. Cette page est un pense-bête pour le moi du futur qui ne désire plus rechercher encore et encore les solutions aux mêmes problèmes.
Les exemples de cette page sont issues de tests effectués avec bash:5.1.1
.
Valeurs par défaut
Déclarer et initialiser une variable est bête comme choux:
variable=valeur
Utiliser cette variable par la suite n’est pas bien plus compliqué:
variable=valeur
echo $variable
Seulement, parfois, j’ai besoin de savoir si une variable est définie (et non vide):
if [ -z $variable ]; then echo Nopitinop; else echo Yeah; fi
Nopitinop
variable=valeur
if [ -z $variable ]; then echo Nopitinop; else echo Yeah; fi
Yeah
Il est possible de donner une valeur par défaut:
echo ${variable-valeur}
valeur
variable=autre
echo ${variable-valeur}
autre
Il est aussi possible de remplacer une valeur, si et seulement si elle existe:
echo ${variable+valeur}
variable=autre
echo ${variable+valeur}
valeur
Nom de fichier
La commande basename
permet, étant donné un path, d’en extaire le nom du fichier.
basename /foo/bar/baz.ext
baz.ext
Il n’est pas rare de devoir récupérer le nom d’un fichier sans son extension:
variable=$(basename /foo/bar/baz.ext)
echo ${variable%.*}
baz
Et, parfois, les fichiers on plusieurs extensions:
variable=$(basename /foo/bar.baz.ext)
echo ${variable%%.*}
bar
Et, pour finir, parfois l’extension est connue d’avance:
tree scripts
scripts/
├── bar.py
├── baz.py
└── foo.py
for file in scripts/*; do echo $(basename $file .py); done;
bar
baz
foo