![if条件でエラーメッセージを/ dev / nullにリダイレクトする[閉じる]](https://linux33.com/image/91611/if%E6%9D%A1%E4%BB%B6%E3%81%A7%E3%82%A8%E3%83%A9%E3%83%BC%E3%83%A1%E3%83%83%E3%82%BB%E3%83%BC%E3%82%B8%E3%82%92%2F%20dev%20%2F%20null%E3%81%AB%E3%83%AA%E3%83%80%E3%82%A4%E3%83%AC%E3%82%AF%E3%83%88%E3%81%99%E3%82%8B%5B%E9%96%89%E3%81%98%E3%82%8B%5D.png)
私は次のif
文を持っています:
if [ "$sourcelast" = "$maxhostlast" ] || [ "$sourcelast" = "$minhostlast" ] || [ "$sourcelast" < "$maxhostlast" ] || [ "$sourcelast" > "$minhostlast" ] ;then ... fi
/dev/null
今、エラーが発生するたびにエラーメッセージを送信したいと思います。
どうすればいいですか?
答え1
続行する前に構文を変更する必要があります。以前のテストの比較演算子ではなく>
、<
シェルリダイレクト演算子です[...]
。\<
一部のシェルではこれをエスケープして\>
文字列比較を保持できます。、または新しいテストを使用してください[[...]]
。
この場合、数値比較をしたいように聞こえるので、標準演算子、、、、-lt
を-le
使用-gt
する必要があります-ge
。
if [ "$sourcelast" = "$maxhostlast" ] ||
[ "$sourcelast" = "$minhostlast" ] ||
[ "$sourcelast" -lt "$maxhostlast" ] ||
[ "$sourcelast" -gt "$minhostlast" ]
then
: "Do something"
fi
すべての条件ですべてのエラーメッセージをリダイレクトするには、そのメッセージをサブシェルにラップします。
if (
[ "$sourcelast" = "$maxhostlast" ] ||
[ "$sourcelast" = "$minhostlast" ] ||
[ "$sourcelast" -lt "$maxhostlast" ] ||
[ "$sourcelast" -gt "$minhostlast" ]
) 2>/dev/null
then
: "Do something"
fi