Désolé si c'est une question stupide, mais j'ai cherché sans succès.
Que fait exactement la deuxième ligne?:
#!/bin/sh
cd ${0%/*} || exit 1
Je sais que le premier est le shebang, le second essaie de changer de répertoire mais la partie déroutante l'est ${0%/*}
.
Pouvez-vous m'expliquer cette deuxième ligne?
command-line
sh
Navaro
la source
la source
dirname
commande$(dirname $0)
dirname
est intégrée? Ce n'est certainement pas dans Bash v4.3.11 qui est le shell par défaut dans Ubuntu Trusty.dirname
n'est pas un shell intégré.Réponses:
${0}
est le premier argument du script, c'est-à-dire le nom ou le chemin du script. Si vous lancez votre scriptpath/to/script.sh
, puis${0}
sera exactement cette chaîne:path/to/script.sh
.La
%/*
pièce modifie la valeur de${0}
. Cela signifie: prendre tous les caractères jusqu'à ce qu'ils soient/
suivis d'un nom de fichier. Dans l'exemple ci-dessus,${0%/*}
serapath/to
.Vous pouvez le voir en action sur votre shell:
Sh prend en charge de nombreux autres types de «substitution de paramètres». Voici, par exemple, comment prendre le nom de fichier au lieu du chemin:
En général,
%
et%%
supprimer les suffixes, tandis que#
et##
supprimer les préfixes. Vous pouvez en savoir plus sur la substitution de paramètres .la source
|| exit 1
peut être nécessaire carcd
peut se terminer avec le statut 2, et non 1, en cas d'erreur. Cependant, je conviens que ce n'est pas très utile (généralement, les programmes ne se soucient pas des statuts de sortie spécifiques). Cela fait probablement partie d'un script plus large?