W Bash
powłoce mogę uzyskać status wyjścia polecenia poprzez $?
zmienną:
# ps -ef | grep "haha"
root 15439 15345 0 23:02 pts/0 00:00:00 grep --color=auto haha
# echo $?
0
Czy jest dostępny tylko w powłoce Bash? Czy mogę też używać go w innych powłokach?
bash
shell
portability
Nan Xiao
źródło
źródło
Odpowiedzi:
Kod
$?
wyjścia jest wspólny dla każdej powłoki, która następuje po POSIX, i jest opisany w 2.5.2 Parametry specjalne :źródło
$r
wierzę). To jest sh praktycznie wszystkich systemów uniksopodobnych od czasu Unixa V7 pod koniec lat 70. XX wieku. Większość innych powłok (csh, tcsh, fish, rc) ma to$status
.Jak powiedział Thomas Dickey, każda powłoka POSIX (tj. Prawie wszystkie z nich) będzie miała
$?
.To pytanie bardzo mnie zainteresowało, więc przetestowałem je na dowolnej powłoce, którą mogłem zdobyć:
mksh
zsh
/bin/sh
na moim Samsungu Galaxy S5/bin/sh
na moim routerzetcsh
ksh
dash
/bin/sh
na moim wirtualnym systemie UNIX V od około 1989 rokucmd.exe
ipowershell.exe
na moim komputerze z systemem Windows 10i
$?
pracował we wszystkich, alefish
icmd.exe
.Znaleziono dwie interesujące rzeczy:
1.
$?
działa w Windows PowerShell!Do pewnego stopnia. Zamiast zwracać 0 lub wyższą liczbę, jest to po prostu
True
iFalse
.2.
$?
nie działa w powłocefish
.Jednak podczas wpisywania
$?
ryb pojawia się następujący komunikat:Nie używałem go zbyt często, ale nie jestem zaskoczony,
fish
wydaje się , że ma swój własny interesujący język powłoki, zupełnie inny niżbash
cokolwiek innego.źródło
$status
co jest o wiele prostsze / czytelne IMO. Tylko powłoki podobne do Bourne'a (wśród powłok uniksowych) używają$?
AFAIK.$?
jako „sh ## się stało?” a potem nigdy nie zapomniałem znaczenia tej specjalnej zmiennej :)