シェルでは、Bash
変数を使用してコマンド終了ステータスを取得できます$?
。
# ps -ef | grep "haha"
root 15439 15345 0 23:02 pts/0 00:00:00 grep --color=auto haha
# echo $?
0
Bashシェルでのみ動作しますか?それとも他のシェルでも使用できますか?
答え1
終了コードは$?
すべてのPOSIX準拠シェルに共通で、次のようになります。2.5.2 特殊パラメータ:
?
最も近いパイプの小数点終了状態に展開します(参照:管路)。
答え2
Thomas Dickeyが言ったように、すべてのPOSIXシェル(つまり、ほぼすべてのシェル)は$?
。
この質問は興味深く、手に入れることができるすべてのシェルでテストしました。
mksh
zsh
/bin/sh
私のサムスンギャラクシーS5で/bin/sh
私のルーターでtcsh
ksh
dash
/bin/sh
私の1989年頃、仮想UNIX System Vでcmd.exe
powershell.exe
私のWindows 10コンピュータで
そして、$?
これらすべてをやってきたが、fish
そしてcmd.exe
。
2つの興味深い点を見つけました。
1. $?
Windows PowerShellで作業してください!
まあ。 0以上の数値を返さずに合計を返しTrue
ますFalse
。
PS C:\WINDOWS\system32> echo $?
True
PS C:\WINDOWS\system32> gfdhgfhfdgfdg
gfdhgfhfdgfdg : The term 'gfdhgfhfdgfdg' is not recognized as the name of a cmdlet, ...(big long error output).....
PS C:\WINDOWS\system32> echo $?
False
2.$?
シェルでは機能しませんfish
。
ただし、「fish」と入力すると、$?
次のメッセージが表示されます。
~$ echo $?
$? is not the exit status. In fish, please use $status.
fish: echo $?
あまり使っていませんでしたが、驚きではありません。fish
それとは全く異なる興味深いシェル言語があるようですbash
。