Sur quel obus je cours?


39

Quand je lance echo $SHELLla sortie dit /bin/tcshce qui signifie que je lance un tcshshell. Mais par exemple quand je lance la commande suivante

alias emacs 'emacs -nw' 

Je reçois l'erreur suivante:

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

et quand j'émets alias emacs="emacs -nw"ça fonctionne bien!

C'est déroutant puisque je cours tcshmais les commandes sont interprétées par bash.

Quelle pourrait être la raison?


tcsh/csha sa coquille actuelle dans$shell
HongboZhu

Réponses:


48

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

ps $$

Cela devrait fonctionner sur les dernières Unix / Linux avec un pssupport qui prend en charge la syntaxe BSD. Sinon, c'est la manière portable (POSIX)

ps -p $$

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

8773 pts/10   00:00:00 tcsh

Si vous voulez avoir tcshvotre shell par défaut, utilisez chshpour le définir.


Savez-vous comment puis-je vérifier quel fichier de configuration est chargé? (which bashrc)
coffeMug

@Coffe_Mug ne sait pas ce que vous voulez dire. Vous pouvez définir le shell par défaut avec chsh, .bashrcne sera lu que si vous exécutez i) bash et ii) en tant que shell interactif sans connexion. Comment vous connectez-vous à cette machine?
terdon

J'ai un script qui démarre ce shell bash à partir d'un shell tcsh.
Café

4
Pourquoi pas simplementps $$
cjm

1
@cjm pourquoi pas, répondez édité.
terdon

8

À partir de la ligne de commande, vous pouvez également utiliser la $0variable pour déterminer le shell que vous utilisez. par exemple:

~$ echo $0
/bin/bash


~$ ksh
$ echo $0
ksh

Remarque: vous ne pouvez pas déterminer le shell à l'aide de $ 0 dans un script, car $ 0 sera le script lui-même.


1

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

1

Ceci est un amendement à toutes les meilleures réponses ci-dessus. J'ai eu un petit problème d'identification de dash à un moment donné; semblait juste de partager:

curl -fsSL http://www.in-ulm.de/~mascheck/various/whatshell/whatshell.sh | sh
ash (dash 0.5.5.1 ff)

curl -fsSL http://www.in-ulm.de/~mascheck/various/whatshell/whatshell.sh | bash
bash 4.3.30(1)-release

Bon pour le dépannage dans des endroits restreints, c'est tout. À votre santé.

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.