797 Stimmen

Wie kann ich die aktuelle interaktive Shell ermitteln, in der ich mich befinde (Befehlszeile)?

Wie kann ich die aktuelle Shell, an der ich arbeite, bestimmen?

Würde die Ausgabe des ps Befehl allein ausreichend sein?

Wie kann dies in verschiedenen Unix-Varianten geschehen?

23voto

sr01853 Punkte 5773

$SHELL muss nicht immer die aktuelle Shell anzeigen. Sie zeigt nur die Standard-Shell an, die aufgerufen werden soll.

Um dies zu testen, sagen Sie bash die Standard-Shell ist, versuchen Sie echo $SHELL und dann im selben Terminal in eine andere Shell ( KornShell (ksh) zum Beispiel) und versuchen $SHELL . Das Ergebnis wird in beiden Fällen als Bash angezeigt.

Um den Namen der aktuellen Shell zu erhalten, verwenden Sie cat /proc/$$/cmdline . Und der Pfad zur ausführbaren Shell von readlink /proc/$$/exe .

19voto

Devang Paliwal Punkte 271

Es gibt viele Möglichkeiten, die Shell und die entsprechende Version herauszufinden. Hier sind einige, die bei mir funktioniert haben.

Unkompliziert

  1. $> echo $0 (Zeigt den Programmnamen an. In meinem Fall war die Ausgabe -bash .)
  2. $> $SHELL (Dadurch gelangen Sie in die Shell und in der Eingabeaufforderung erhalten Sie den Namen und die Version der Shell. In meinem Fall bash3.2$ .)
  3. $> echo $SHELL (Dadurch erhalten Sie den ausführbaren Pfad. In meinem Fall /bin/bash .)
  4. $> $SHELL --version (Dies gibt vollständige Informationen über die Shell-Software mit Lizenztyp)

Hackiger Ansatz

$> ******* (Geben Sie eine Reihe von zufälligen Zeichen ein und in der Ausgabe erhalten Sie den Namen der Shell. In meinem Fall -bash: chapter2-a-sample-isomorphic-app: Befehl nicht gefunden )

13voto

user5659949 Punkte 121

Ich habe einen einfachen Trick, um die aktuelle Shell zu finden. Geben Sie einfach eine zufällige Zeichenfolge ein (die kein Befehl ist). Es wird fehlschlagen und einen Fehler "nicht gefunden" zurückgeben, aber am Anfang der Zeile wird es sagen, welche Shell es ist:

ksh: aaaaa: not found [No such file or directory]
bash: aaaaa: command not found

8voto

Ich habe viele verschiedene Ansätze ausprobiert, und der beste ist für mich der:

ps -p $$

Es funktioniert auch unter Cygwin und kann keine falsch positiven Ergebnisse wie beim PID-Grepping erzeugen. Mit etwas Bereinigung gibt es nur den Namen der ausführbaren Datei aus (unter Cygwin mit Pfad):

ps -p $$ | tail -1 | awk '{print $NF}'

Sie können eine Funktion erstellen, damit Sie sie nicht auswendig lernen müssen:

# Print currently active shell
shell () {
  ps -p $$ | tail -1 | awk '{print $NF}'
}

...und dann einfach ausführen shell .

Es wurde unter Debian und Cygwin getestet.

6voto

Matthew Stier Punkte 51

Meine Variante zum Drucken des Elternprozesses:

ps -p $$ | awk '$1 == PP {print $4}' PP=$$

Führen Sie keine unnötigen Anwendungen aus, wenn AWK das für Sie erledigen kann.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X