私の bash スクリプトでは、ロガー バイナリが存在するかどうかを確認する必要があります。その場合は、アプリケーションの出力をそれにパイプします。
編集--------
| パイプする必要があり、アプリケーションは永続的に機能する必要があります。
---------------
パイプラインのものを変数に入れて、後で使用しようとしました。何かのようなもの:
if [ -e /usr/bin/logger ]; then
OUT=| /usr/bin/logger
fi
application param1 2>&1 $OUT > /dev/null &
出力はロガーにパイプされません。パイプラインをアプリケーションのスタートラインに直接配置すると、機能します。残念ながら、 if/else ステートメントでロガーを使用するコマンド ラインと使用しないコマンド ラインを使用すると、実際のスクリプトは複雑になりすぎます。
簡単なテスト アプリケーション
TMP=| wc -m
echo aas bdsd vasd $TMP
与える
$ ./test.sh
0
aas bdsd vasd
どういうわけか、command1 と command2 は別々に実行されているようです。
eval
条件付きのものを二重引用符で囲んで使用することで、(テストスクリプトと実際のスクリプトの両方で)問題を解決できました。
TMP="| wc -m"
eval echo aas bdsd vasd $TMP
$ ./test.sh
14
それは回避策のように感じます。それを行う正しい方法は何ですか?