web-dev-qa-db-fra.com

Dans quelle coquille suis-je?

Existe-t-il une commande pour identifier le nom/type du shell actuel, le chemin d'accès au fichier binaire du shell et la version du shell?

Je n'ai pas besoin de tout ça, mais plus je peux en avoir, mieux c'est.

Je veux quelque chose qui a la même sensation de uname, pwd, whoami. Juste un utilitaire simple avec une sortie simple. (qui jusqu'à présent ne s'est pas montré: /)

re ps

$ ps -o comm $$
COMM
-bash

Pourquoi -bash au lieu du chemin complet comme ce serait le cas avec tout le reste? Quel est le problème avec le tiret là-bas?

41
kch

La commande ou le chemin d'accès au shell en cours d'exécution est stocké dans la variable d'environnement $0. Pour voir sa valeur, utilisez:

echo $0

Cela affiche votre Shell ou actuellement en cours d'exécution sur le chemin de votre Shell en cours d'exécution, selon la façon dont il a été appelé. Certains traitements peuvent être nécessaires:

Prompt:~$ echo $0
/bin/bash
Prompt:~$ sh
sh-4.0$ echo $0
sh
sh-4.0$ exit
exit
Prompt:~$ /bin/sh
sh-4.0$ echo $0
/bin/sh
sh-4.0$

La variable d'environnement $Shell contient le shell préféré de l'utilisateur, pas nécessairement le shell en cours d'exécution.

55
Mala

Si vous ne spécifiez pas de programme dans la ligne Shebang, je pense que/bin/sh sera utilisé. Malheureusement, je ne pense pas qu'il existe un bon moyen portable de déterminer ce qu'est Shell.

Si vous utilisez par exemple Linux, vous pouvez trouver le chemin du fichier exécutable via /proc:

$ readlink "/proc/$$/exe"
/bin/dash

et obtenir le nom de l'exécutable est facile avec ps $$.

Mais cela ne vous aidera pas avec le type de Shell (sauf via une table de recherche de shell connus) ni avec la version (AFAICT, il n'y a même pas moyen d'obtenir la version à partir de dash)

7
derobert

Essayez ($$ est la variable Shell définie pour traiter l'identifiant du Shell):

ps -ef | grep $$

ou essayez ceci (/ proc/self est un identifiant de processus aloso du shell):

ps -ef | grep /proc/self

En ce qui concerne "-bash" - tiret signifie que c'est le login Shell. Tapez bash encore et maintenant vous verrez que le shell est juste "bash" (sans tiret)

5
dimba

Je pense que 'finger' est le bon que vous recherchez . Essayez cette commande:

finger `whoami`
2
Jackie Yeh

Plutôt que d'essayer de déterminer le shell actuellement utilisé, il est généralement plus approprié de simplement l'exécuter à nouveau en tant que shell souhaité. Il s’agit peut-être simplement d’une solution historique au problème, car il n’existe aucun moyen fiable et portable de déterminer le Shell que vous utilisez actuellement. La meilleure chose à faire est d’écrire votre script pour travailler dans le plus grand nombre possible de shells afin que ce ne soit pas un problème. (par exemple, la portabilité est importante, peu importe le nombre de personnes voulant dire que "bash est partout")

1
William Pursell

Vous pouvez utiliser les éléments suivants dans Arch Linux.

echo $Shell
0
Upul Doluweera