J'ai lu que le terminal n'est rien d'autre qu'un shell, et Unix fournit différentes saveurs de shell:
- Bourne shell (sh)
- C shell (csh)
- Shell TC (tcsh)
- Korn shell (ksh)
- Bourne Again shell (bash)
Des questions:
- Lorsque j'ouvre une fenêtre de terminal, quel shell est ouvert par défaut?
- Comment vérifier le nombre de coques installées?
- Comment changer le shell utilisé depuis mon compte?
command-line
LearNer969
la source
la source
Réponses:
Vous pouvez taper la commande suivante dans votre terminal pour voir quel shell vous utilisez:
Le résultat ressemblera à celui ci-dessous si vous utilisez le terminal bash ( Bourne Again Shell ):
la source
0
une variable d'environnement?csh
.% echo $0 No file for $0.
, mais ça marche pourtcsh
bash
commesh
echo $0
,ls -l `which <name>`
pour voir s'il est lié de manière symétrique à un autre fichier binaire du shell.Pour trouver le shell que vous avez sur l'environnement par défaut, vous pouvez vérifier la valeur de la
SHELL
variable d'environnement:Pour rechercher l'instance de shell actuelle, recherchez le processus (shell) ayant le PID de l'instance de shell actuelle.
Pour trouver le PID de l'instance actuelle du shell:
Maintenant, pour trouver le processus ayant le PID:
Mettre ensemble:
la source
echo $SHELL
m'a donné/bin/csh
etps -p $$
m'a donné22673 pts/1 00:00:00 bash
. Kingmilo a expliqué (ci-dessus) pourquoi ils ne sont pas identiques.$SHELL
vous donne le shell par défaut.$0
vous donne le shell actuel.Par exemple: bash est mon shell par défaut que j'utilise pour mon application Terminal. Mais pour mon application iTerm2, j'utilise la commande que la fenêtre s'ouvre:
/bin/ksh
.Donc, ma
$0
donne moi/bin/ksh
sur iTerm2.$SHELL
me donne/bin/bash
sur iTerm2.$0
,$SHELL
me donne/bin/bash
sur le terminalla source
bash
le terminal. Pour revenir à zsh, tapezzsh
Pour savoir quel est le shell par défaut pour votre utilisateur, vous pouvez exécuter:
Par exemple, si vous utilisez Bash, vous devriez obtenir le résultat suivant:
Si vous n'avez modifié aucune configuration, il devrait s'agir de Bash, car c'est le shell par défaut sous Ubuntu.
la source
/bin/sh
référence dans ma réponse$$
variable est en réalité définie par POSIX et fonctionnera sur la grande majorité des coques. Fish a décidé de ne pas suivre la norme ici, alors je pense qu'il est juste de l'ignorer. Je peux confirmer que cela$$
fonctionne comme prévu dans sh, dash, bash, zsh, ksh, ash, tcsh et csh. En fait, de mémoire, je ne peux penser à aucune autre coquille à l’exception du poisson où cela ne fonctionne pas.Les autres réponses utilisent généralement des fonctionnalités spécifiques au shell, mais nous essayons de déterminer quel shell nous utilisons, elles supposent donc la réponse au problème. Par exemple, aucune des réponses ne fonctionnera sur le poisson.
À la place, utilisez la syntaxe $$ dans un appel de sh, mais nous recherchons alors le PPID et non le PID. Utilisez le PPID pour trouver le cmd.
Merci pour l'amélioration @muru
la source
ppid=
/cmd=
pour omettre les en-têtes (et donc letail -1
s), et envisager de regarder/proc/.../exe
quel fichier est en cours d’exécution (puisque lacmd
sortie peut être manipulée par tout ce qui a été exécuté par le shell).Le message original posait trois questions. Les réponses données couvrent la première question, "Quand j'ouvre une fenêtre de terminal, quel shell est ouvert par défaut?" Ils répondent également à une question qui N'A PAS été posée, à savoir "Comment puis-je savoir quel shell est en cours d'exécution dans le terminal?" Toutefois, pour autant que je sache, personne n’a répondu à la deuxième ou à la troisième question posée à l’origine, à savoir: "Comment puis-je vérifier le nombre de réservoirs installés?" et "Comment changer le shell utilisé depuis mon compte?"
chat / etc / coquilles
Par exemple, sur une installation par défaut d’Ubuntu 18.10, ceci donne:
# / etc / shells: shells de connexion valides
/ bin / sh
/ bin / dash
/ bin / bash
/ bin / rbash
Cependant, par défaut, sh est un lien symbolique vers dash, tandis que rbash se connecte à bash avec l'option -r ("restricted bash"), de sorte qu'il n'y a en réalité que deux shells, et non quatre comme le suggère la liste ci-dessus. La commande suivante vous montrera si l'un des shells listés est en fait un lien symbolique et, le cas échéant, à quel lien: ls -l / bin
la source