Wie erkenne ich, welchen Typ meine Shell hat?
Wie kann ich feststellen was für ein Typ meine shell ist? dh, ob es sich um traditionelle sh, bash, ksh, csh, zsh etc.
Beachten Sie, dass die überprüfung $SHELL
oder $0
wird nicht funktionieren, weil $SHELL
nicht durch alle Schalen, so dass, wenn Sie starten in eine Schale und dann beginnen, eine andere Sie können immer noch die alte $SHELL
.
$0
nur sagt Ihnen, wo das shell-binary ist, aber nicht sagen, ob Sie /bin/sh
ist eine echte Bourne-shell oder bash.
Vermute ich, dass die Antwort "versuchen Sie, einige features und sehen, was bricht", also wenn jemand kann mir bei einem Skript, dass das macht, das wäre toll.
InformationsquelleAutor der Frage DrHyde | 2011-03-02
Du musst angemeldet sein, um einen Kommentar abzugeben.
Dies ist, was ich in meiner
.profile
:Es nicht machen feine Unterschiede zwischen ksh88, ksh95, pdksh oder mksh etc., aber in mehr als zehn Jahren hat es sich für mich zu arbeiten, wie entworfen, auf allen Systemen, die ich zu Hause waren (BSD, SunOS, Solaris, Linux, Unicos, HP-UX, AIX, IRIX, MicroStation, Cygwin.)
Ich nicht die Notwendigkeit sehen, zu prüfen, für die csh in
.profile
als csh-Quellen den anderen Dateien, die beim Systemstart.Jedes Skript, das Sie schreiben nicht brauchen, um zu überprüfen, für csh vs Bourne-Erbe, weil Sie explizit den Namen der interpreter in der shebang-Zeile.
InformationsquelleAutor der Antwort Jens
Versuchen, lokalisieren Sie das shell-Pfad mit der aktuellen shell-PID:
Sollte es funktionieren, zumindest mit sh, bash und ksh.
InformationsquelleAutor der Antwort ziu
Wenn der Grund, Sie Fragen, ist, zu versuchen, zu schreiben, portabler shell-code, dann entdecken Sie die shell-Typ, und die Umstellung auf Ihr basiert, ist eine unzuverlässige Strategie. Es gibt einfach zu viel variation möglich.
Je nachdem, was Sie hier tun, möchten Sie vielleicht zu schauen,der relevante Teil der autoconf Dokumentation. Das schließt ein interessante (und in mancher Hinsicht ziemlich düster) Zoologie der verschiedenen shell-Aberrationen.
Für das Ziel portabler code sollte dieser Abschnitt sehr hilfreich sein. Wenn Sie brauchen, um vor Ort shell-Varianten, dann könnte es einige code begraben in autoconf (oder zumindest in einem der
./configure
Skripte, die es erzeugt), die helfen, mit dem schnüffeln.InformationsquelleAutor der Antwort Norman Gray
Können Sie so etwas wie dieses:
InformationsquelleAutor der Antwort Let_Me_Be
Oh, ich hatte dieses problem. 😀
Es ist ein schneller hack, verwenden Sie
ps -p $$
Befehl, um die Liste der Prozess mit der PID des Laufenden Prozesses-das ist deine SHELL. Diese gibt eine Zeichenfolge zurück, die die Struktur einer Tabelle, wenn Sie möchten, können Sie AWK oder SED die shell aus...InformationsquelleAutor der Antwort Cipi
Es ist der alte thread, aber...
In die GNU-Umgebung können Sie
sh --help
und bekommen so etwas wieSo, die erste Zeile ist eine Schale geben =)
InformationsquelleAutor der Antwort Arano-kai
Die system-shell ist das, was Sie sehen, wenn Sie öffnen Sie ein neues terminal-Fenster, die nicht auf etwas anderes als die bash (vorausgesetzt, dies ist Ihr Standard -
SHELL
).Im Allgemeinen, Sie können herausfinden, alle definierten Konstanten, durch ausführen
set
Wenn die Ausgabe ist eine Menge Zeug dann laufen
set | less
so können Sie Blättern, es von der Spitze der Befehlszeile oder
set > set.txt
Speichern Sie die Ausgabe in eine Datei.
Aufrufen einer anderen interaktiven shell bash im terminal nicht bedeuten, dass Ihre system-shell wird geändert, um etwas anderes, D. H. die system-shell auf bash, obwohl man sich auf eine csh-shell eine bash-shell nur, dass eine session.
Den oben bedeutet, dass die Eingabe
/bin/csh
oder/bin/python
in bash oder was auch immer nicht die system-shell, die shell aufgerufen wird.Wenn Sie wirklich wollen, um zu sehen, die SHELL-Konstanten ändern, dann müssen Sie es auf etwas anderes. Wenn Sie erfolgreich Sie sollten die neue shell, wenn Sie öffnen ein frisches terminal...
InformationsquelleAutor der Antwort Magpie