psコマンドは、変数に割り当てられたときに異なる値を取得します。

psコマンドは、変数に割り当てられたときに異なる値を取得します。

変数に割り当てると、他の結果が表示されます。なぜこれですか?

#!/bin/bash
P=$(ps -ef | grep ${APP} | grep -v grep  | wc -l)
echo ps -ef | grep ${APP} | grep -v grep  | wc -l
echo $P

出力:

0
3

答え1

2番目のコマンドは実際には実行せず、代わりps -efにリテラル文字列をエコーするので、欠陥がありますps -ef。次に、grep文字列にない特定の文字列を取得し、返されたps -ef行数を計算します0。つまり、 。

簡単にこれを行うことができます:

P=$(ps -ef | grep "${APP}" | grep -v grep  | wc -l)
ps -ef | grep "${APP}" | grep -v grep  | wc -l
echo "$P"

あるいは、Jeffが指摘したように、これはより簡単ですpgrep

p=$(pgrep "${APP}" | wc -l)
pgrep "${APP}" | wc -l
echo "$p"

関連情報