Vous ne voudrez peut-être pas connaître le nom du shell actuel (par exemple, -bash
, bash
, zsh
, etc., à partir de echo $0
), ni le chemin d'accès de l'exécutable par défaut du shell (à partir de echo $SHELL
), mais plutôt le chemin d'accès de l'exécutable du shell actuel (particulièrement utile si vous avez plus d'une version de Bash installée).
Pour cela, vous pouvez utiliser lsof -p "$$"
ou avec quelques lignes de code supplémentaires 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
Le résultat ci-dessus est différent de echo $SHELL
, d'une part parce que le résultat ci-dessus concerne le shell actuellement en cours d'exécution plutôt que le shell par défaut de l'utilisateur, et d'autre part parce que le résultat ci-dessus 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
.
ÉDIT : Si vous avez besoin de prendre en compte la possibilité de caractères d'espacement dans le chemin d'accès du shell, utilisez lsof -p "$$" | grep -m 1 txt | xargs -n 1 | tail -n +9 | xargs
à la place.