Bashで計算に 'if'を使用するとエラーが発生しました。

Bashで計算に 'if'を使用するとエラーが発生しました。

次の内容に問題がありますか?エラーが発生します[: too many arguments

if [ 'wc -l pid.txt | awk '{print $1}'' -ge "1" ]
then
    for line in $(cat pid.txt)
    do
        kill $line
    done
else
    rm pid.txt
fi

答え1

良い活動と発展に感謝します。

  • while readループは空のファイルで実行されないため、ファイルの内容をテストする必要はありません。
  • [ -s pid.txt ] || rm pid.txtその後、.pidファイルを使用して簡単に削除できます。しかし、、本当に処理されたファイルを保持する理由はありますか?とにかく削除したいようです。

while read -r line
do
    kill "$line"
done < pid.txt
[ -s pid.txt ] || rm pid.txt

while read代わりにループが使用されていますfor $(cat ...)行を読むときにforを使用しないでください

この-rオプションは、「バックスラッシュでエスケープされた文字を許可しない」を指定します。これは実際にはpidファイルでは問題ではありませんが、特に理由がない限り、常に設定するのが最善です。

関連情報