
RUNNING_APPS=$(pgrep -f "somePattern")
echo $?
#results in
1
終了コード 0 でコマンドを成功させるにはどうすればよいですか?
答え1
私の Arch システムでは、pgrep
から を使用するとprocps-ng
、 に次のメッセージが表示されますman pgrep
:
EXIT STATUS
0 One or more processes matched the criteria. For
pkill the process must also have been success‐
fully signalled.
1 No processes matched or none of them could be
signalled.
2 Syntax error in the command line.
3 Fatal error: out of memory etc.
これが現状です。pgrep
すべてが正常に動作したが、検索文字列に一致するプロセスがない場合は、1で終了します。つまり、別のツールを使用する必要があります。おそらく、Kusalanandaがコメントで提案したようなものやilkkachu が回答として投稿しました:
running_apps=$(pgrep -f "somePattern" || exit 0)
しかし、私の意見では、スクリプトを変更する方がよいと思います。 を使用する代わりにset -e
、重要なステップで手動で終了するようにしてください。次に、次のようなものを使用できます。
running_apps=$(pgrep -fc "somePattern")
if [ "$running_apps" = 0 ]; then
echo "none found"
else
echo "$running_apps running apps"
fi
答え2
では、AND ( ) または OR ( ) 演算子set -e
の左側にあるコマンドによってシェルが終了しないため、 を追加することでエラーを抑制できます。&&
||
|| true
したがって、0
見つかったプロセスに関係なく出力する必要があります (出力前に終了しないでください)。
set -e
RUNNING_APPS=$(pgrep -f "somePattern" || true)
echo $?