Je veux juste comprendre la ligne de code suivante dans Shell. Il est utilisé pour obtenir le répertoire de travail actuel. Je suis conscient que $(variable)
name renvoie la valeur à l'intérieur du nom de la variable, mais qu'est-ce que $(command)
est censé renvoyer? Renvoie-t-il la valeur après avoir exécuté la commande? Dans ce cas, nous pouvons utiliser `
pour exécuter la commande.
CWD="$(cd "$(dirname $0)"; pwd)"
La même sortie peut être extraite de la ligne de code suivante également dans une version différente de Shell
DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )"
Je suis incapable de comprendre le sens de $(cd..
et $(dirname
.
Quelqu'un pourrait-il m'aider à comprendre comment cette commande est exécutée?
L'utilisation de $
Comme ${HOME}
Donne la valeur de HOME. L'utilisation de $
Comme $(echo foo)
signifie exécuter tout ce qui est à l'intérieur des parenthèses dans un sous-shell et le renvoyer sous forme de valeur. Dans mon exemple, vous obtiendrez foo
car echo
écrira foo
dans la sortie standard
DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )"
Quelqu'un pourrait-il m'aider à comprendre comment cette commande est exécutée?
Regardons les différentes parties de la commande. BASH_SOURCE
Est une variable de tableau bash contenant les noms de fichiers source. Donc "${BASH_SOURCE[0]}"
Vous renverrait le nom du fichier de script.
dirname
est un utilitaire fourni par GNU coreutils qui supprime le dernier composant du nom de fichier. Ainsi, si vous exécutez votre script en disant bash foo
, "$( dirname "${BASH_SOURCE[0]}" )"
renverrait .
. Si vous disiez bash ../foo
, il renverrait ..
; pour bash /some/path/foo
retourne /some/path
.
Enfin, toute la commande "$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )"
obtient le répertoire absolu contenant le script appelé.
$(...)
autorise la substitution de commande, c’est-à-dire permet à la sortie d’une commande de remplacer la commande elle-même et peut être imbriquée.