RUNNING_APPS=$(pgrep -f "somePattern")
echo $?
#results in
1
コマンドパス終了コードを0にするにはどうすればよいですか?
答え1
私のArchシステムでは、pgrep
fromを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で終了します。これは、さまざまなツールを使用する必要があることを意味します。おそらくKusalalanandaがコメントで提案したように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 $?