it-swarm.com.de

Auf welcher Shell laufe ich?

Wenn ich echo $Shell die Ausgabe sagt /bin/tcsh was bedeutet, dass ich eine tcsh Shell ausführe. Aber zum Beispiel, wenn ich den folgenden Befehl gebe

alias emacs 'emacs -nw' 

Ich erhalte folgende Fehlermeldung:

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

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

Dies ist verwirrend, da ich tcsh ausführe, aber die Befehle von bash interpretiert werden.

Was könnte der Grund sein?

40
coffeMug

$Shell ist nicht unbedingt Ihre aktuelle Shell, sondern die Standard-Login-Shell . Versuchen Sie es mit der von Ihnen verwendeten Shell

ps $$

Dies sollte unter dem neuesten Unix/Linux mit einem ps funktionieren, das die BSD-Syntax unterstützt. Andernfalls ist dies der tragbare (POSIX) Weg

ps -p $$

Das sollte ungefähr so ​​etwas zurückgeben, wenn Sie tcsh ausführen:

8773 pts/10   00:00:00 tcsh

Wenn Sie möchten, dass tcsh Ihre Standard-Shell ist, verwenden Sie chsh, um sie festzulegen.

49
terdon

Über die Befehlszeile können Sie auch die Variable $0 Verwenden, um zu bestimmen, welche Shell Sie verwenden. z.B.:

~$ echo $0
/bin/bash


~$ ksh
$ echo $0
ksh

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

9
jamespfinn

Dies 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
1
user79743

Dies ist eine Änderung zu allen oben genannten besseren Antworten. Ich hatte ein winziges Problem bei der Identifizierung des Strichs an einem Punkt. 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 an engen Stellen ist alles. Prost.

1
todd_dsm