Comment obtenir le shell par défaut
Nous pouvons exécuter quelque chose comme chsh -s /usr/local/bin/zsh
pour définir un nouveau shell par défaut. Est-il une commande nous pouvons exécuter pour savoir ce que la coquille est?
Je ne veux pas avoir un terminal ouvert et en cours d'exécution d'une commande pour savoir qui de coquille nous sommes, je veux dire comme dans l'exemple ci-dessus, si je suis dans un terminal avec /bin/bash
ouvert, que dois-je exécuter pour obtenir /usr/local/bin/zsh
si c'est la valeur par défaut du shell?
source d'informationauteur user137369
Vous devez vous connecter pour publier un commentaire.
vous pouvez utiliser la commande suivante
echo $SHELL
pour macOS
Vous pouvez grep dans le fichier /etc/passwd pour le nom d'utilisateur actuel, et d'utiliser cut pour extraire la colonne appropriée de l'information:
$(id -un)
est plus sûr que$USER
pour obtenir le nom d'utilisateur. À l'aide de^
en face du nom d'utilisateur et:
après permet de s'assurer que vous n'obtenez pas un faux match si votre nom d'utilisateur est une sous section de quelqu'un d'autre nom d'utilisateur.$SHELL
peut également être utilisé, comme le suggère. Cependant, il ne fonctionnera pas sichsh
a été utilisé dans le shell courant, tant que la variable n'est pas mise à jour. Aussi la variable n'est pas protégé contre le fait d'être changé, de sorte qu'il peut théoriquement être quelque chose de complètement différent.Mise à jour pour tenter un OS X compatible avec la solution. Probablement pas optimale regexp:
Ceci est basé sur l'id d'utilisateur. Si l'ensemble d'entrée est manquante, pas seulement le nom d'utilisateur, puis osx devez stocker quelque part d'autre.
si vous voulez obtenir le shell par défaut d'un utilisateur, vous pouvez filtrer les
/etc/passwd
. comme:de me dire que l'utilisateur actuel (kent) a shell par défaut
/bin/zsh
si vous voulez juste pour attraper le shell partie:
Si vous voulez obtenir le shell par défaut de l'utilisateur, il suffit de remplacer le $USER de la partie.
Dans OS X, à l'aide de la commande
env | grep -i 'SHELL'
produit une sortie tels que:SHELL=/bin/sh
(en tant que root, cependant les utilisateurs réguliers ont tendance à avoir /bin/bash comme shell par défaut) avec un peu d'analyse, le chemin de l'interpréteur de commandes (et donc le shell lui-même) peut être identifié facilement et extrait à partir de là..
Mise à JOUR: Désolé, mauvaise réponse. La question demande shell par défautpas pour shell courant.
Le moyen le plus fiable est
ps -p$$
qui est d'examiner le processus actuel (la coquille qui est de la réception de votre intrants maintenant).$SHELL
n'est pas fiable du tout.