Auf welcher Shell laufe ich?

39

Wenn ich echo $SHELLdie Ausgabe starte /bin/tcsh, heißt das, dass ich eine tcshShell starte. Aber zum Beispiel, wenn ich den folgenden Befehl gebe

alias emacs 'emacs -nw' 

Ich erhalte folgenden Fehler:

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

und wenn ich es ausstelle alias emacs="emacs -nw"läuft es einwandfrei!

Das ist verwirrend, da ich laufe, tcshaber die Befehle von interpretiert werden bash.

Was könnte der Grund sein?

Kaffeebecher
quelle
tcsh/cshhat seine aktuelle Muschel in$shell
HongboZhu

Antworten:

48

$SHELLDies ist nicht unbedingt Ihre aktuelle Shell, sondern die Standardanmeldeshell . Versuchen Sie, die von Ihnen verwendete Shell zu überprüfen

ps $$

Dies sollte unter den neuesten Unix / Linux-Versionen funktionieren ps, die die BSD-Syntax unterstützen. Ansonsten ist dies die tragbare (POSIX) Methode

ps -p $$

Das sollte ungefähr so ​​aussehen, wenn Sie ausgeführt werden tcsh:

8773 pts/10   00:00:00 tcsh

Wenn Sie tcshIhre Standard-Shell sein möchten chsh, legen Sie sie mit fest.

terdon
quelle
Weißt du, wie ich überprüfen kann, welche Konfigurationsdatei geladen ist? (which bashrc)
coffeMug
@ Coffee_Mug nicht sicher, was du meinst. Sie können die Standard - Shell - Set mit chsh, .bashrcwerden nur gelesen, wenn man i) bash ausgeführt wird und ii) es als interaktive, nicht-Login - Shell ausgeführt wird . Wie melden Sie sich bei diesem Computer an?
Terdon
Ich habe ein Skript, das diese Bash-Shell von einer TCSH-Shell startet.
coffeMug
4
Warum nicht einfachps $$
cjm
1
@cjm warum eigentlich nicht, antworte bearbeitet.
Terdon
8

Über die Befehlszeile können Sie auch mithilfe der $0Variablen bestimmen, welche Shell Sie verwenden. z.B:

~$ echo $0
/bin/bash


~$ ksh
$ echo $0
ksh

Hinweis: Sie können die Shell nicht mithilfe von $ 0 in einem Skript ermitteln, da $ 0 das Skript selbst ist.

Jamespfinn
quelle
1

Das funktioniert unter Linux:

lsof -a -p $$ -d txt

oder, wenn Sie eine stärkere Auswahl benötigen (mehr Systeme):

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

quelle
1

Dies ist eine Ergänzung zu allen oben genannten besseren Antworten. Ich hatte ein winziges Problem bei der Identifizierung eines Strichs. schien richtig zu teilen:

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

Gut für die Fehlersuche in engen Stellen ist alles. Prost.

todd_dsm
quelle