Vous ne voulez peut-être pas connaître le nom du shell actuel (par exemple -bash
, bash
, zsh
, etc., à partir de echo $0
), ni le chemin d'exécution par défaut du shell (à partir de echo $SHELL
), mais plutôt le chemin d'exécution du shell actuel (surtout utile par exemple si vous avez plusieurs versions de Bash installées).
Pour cela, vous pouvez utiliser lsof -p "$$"
ou avec un peu de codage supplémentaire pour extraire uniquement les informations requises :
lsof -p "$$" | grep -m 1 txt | xargs -n 1 | tail -n 1
Exemple de sortie pour Bash installé via Homebrew :
/usr/local/Cellar/bash/5.1.8/bin/bash
ou pour Zsh :
/bin/zsh
Cela diffère de echo $SHELL
, à la fois parce que ce qui précède concerne le shell qui s'exécute actuellement plutôt que le shell par défaut de l'utilisateur, et aussi parce que ce qui précède donne l'exécutable après que tous les liens symboliques ont été étendus. Par exemple, pour la même installation de Bash que ci-dessus, echo $SHELL
donne /usr/local/bin/bash
.
MODIFICATION : Si vous avez besoin de prévoir la possibilité de caractères d'espace dans le chemin du shell, utilisez lsof -p "$$" | grep -m 1 txt | xargs -n 1 | tail -n +9 | xargs
à la place.