Sur quel shell suis-je en train de courir?

Quand j'exécute echo $SHELL la sortie indique /bin/tcsh ce qui signifie que tcsh un shell tcsh . Mais par exemple quand je lance la command suivante

 alias emacs 'emacs -nw' 

J'obtiens l'erreur suivante:

 bash: alias: emacs: not found bash: alias: emacs -nw: not found 

et quand je alias emacs="emacs -nw" ça fonctionne bien!

C'est déroutant puisque je cours tcsh mais les commands sont interprétées par bash .

quelle pourrait être la raison?

$SHELL n'est pas nécessairement votre shell actuel, c'est le shell de connection par défaut . Pour vérifier le shell que vous utilisez, essayez

 ps $$ 

Cela devrait fonctionner sur le plus récent Unix / Linux avec un ps qui supporte la syntaxe BSD. Sinon, il s'agit de la méthode portable (POSIX)

 ps -p $$ 

Cela devrait renvoyer quelque chose comme ceci si vous exécutez tcsh :

 8773 pts/10 00:00:00 tcsh 

Si vous voulez que tcsh soit votre shell par défaut, utilisez chsh pour le définir.

À partir de la command line, vous pouvez également utiliser la variable $0 pour déterminer quel shell vous utilisez. par exemple:

 ~$ echo $0 /bin/bash ~$ ksh $ echo $0 ksh 

Note: vous ne pouvez pas déterminer le shell en utilisant $ 0 dans un script, parce que $ 0 sera le script lui-même.

Cela fonctionne pour linux:

 lsof -a -p $$ -d txt 

ou, si vous avez besoin d'une sélection plus forte (plus de systèmes):

 lsof -a +D /bin +D /usr/bin -p $$ -d txt