In der Bash
Shell kann ich den Befehls-Exit-Status über die $?
Variable abrufen:
# ps -ef | grep "haha"
root 15439 15345 0 23:02 pts/0 00:00:00 grep --color=auto haha
# echo $?
0
Ist es nur in der Bash-Shell verfügbar? Oder kann ich es auch in anderen Muscheln verwenden?
bash
shell
portability
Nan Xiao
quelle
quelle
Antworten:
Der
$?
Exit-Code ist für jede Shell, die POSIX folgt, gleich und wird in 2.5.2 Spezielle Parameter beschrieben :quelle
$r
ich glaube). Das ist das Problem praktisch aller Unix-ähnlichen Systeme seit Unix V7 Ende der 70er Jahre. Die meisten anderen Shells (csh, tcsh, fish, rc) haben es als$status
.Wie Thomas Dickey sagte, wird jede POSIX-Shell (dh so ziemlich alle) haben
$?
.Diese Frage hat mich sehr interessiert, deshalb habe ich sie an jeder Shell getestet, die ich in die Hände bekommen konnte:
mksh
zsh
/bin/sh
auf meinem Samsung Galaxy S5/bin/sh
auf meinem Routertcsh
ksh
dash
/bin/sh
auf meinem virtuellen UNIX System V von 1989 oder socmd.exe
undpowershell.exe
auf meinem Windows 10 Computerund
$?
arbeitete in all diesen aberfish
undcmd.exe
.Zwei interessante Dinge gefunden:
1.
$?
funktioniert in Windows PowerShell!Nun, bis zu einem gewissen Punkt. Anstatt 0 oder eine höhere Zahl zurückzugeben, ist es nur
True
undFalse
.2.
$?
funktioniert nicht in der Shellfish
.Wenn Sie jedoch
$?
Fisch eingeben, wird folgende Meldung angezeigt:Ich habe es nicht viel benutzt, aber ich bin nicht überrascht,
fish
scheint eine eigene interessante Shell-Sprache zu haben, ganz anders alsbash
oder was auch immer.quelle
$status
was IMO viel einfacher / lesbarer ist. Nur Bourne-ähnliche Shells (unter Unix-Shells) verwenden$?
AFAIK.$?
als "sh ## passiert?" und danach habe ich nie die Bedeutung dieser speziellen Variablen vergessen :)