В Bash
оболочке я могу получить статус выхода команды через $?
переменную:
# ps -ef | grep "haha"
root 15439 15345 0 23:02 pts/0 00:00:00 grep --color=auto haha
# echo $?
0
Это доступно только в оболочке Bash? Или я тоже могу использовать его в других оболочках?
bash
shell
portability
Нань Сяо
источник
источник
Ответы:
Код
$?
выхода является общим для любой оболочки, которая следует за POSIX, и описан в 2.5.2 Специальные параметры :источник
$r
я полагаю). Так что это практически всех Unix-подобных систем, начиная с Unix V7 в конце 70-х. Большинство других оболочек (csh, tcsh, fish, rc) имеют это$status
.Как сказал Томас Дики, любая оболочка POSIX (т.е. почти все из них) будет иметься
$?
.Этот вопрос меня немного заинтересовал, поэтому я проверил его на любой оболочке, которую смог достать:
mksh
zsh
/bin/sh
на моем Samsung Galaxy S5/bin/sh
на моем роутереtcsh
ksh
dash
/bin/sh
на моей виртуальной UNIX System V с 1989 года или около тогоcmd.exe
иpowershell.exe
на моем компьютере с Windows 10и
$?
работал во всех этих, ноfish
иcmd.exe
.Нашел две интересные вещи:
1.
$?
работает в Windows PowerShell!Ну, в точку. Вместо того, чтобы возвращать 0 или большее число, это просто
True
иFalse
.2.
$?
не работает в оболочкеfish
.Тем не менее, когда вы вводите
$?
рыбу, вы получаете это сообщение:Я не использовал это много, но я не удивлен, у меня,
fish
кажется, есть свой собственный интересный язык оболочки, полностью отличающийся отbash
чего-либо.источник
$status
гораздо более понятная / разборчивая IMO. Только Bourne-подобные оболочки (среди оболочек Unix) используют$?
AFAIK.$?
как "ш ## случилось?" и после этого я никогда не забывал значение этой специальной переменной :)