したがって、次の例では:
echo "text to write to file but also not send to stdout" | tee -a $logfile 1> /dev/null
出力は端末に印刷されません。しかし、変数に基づいて同じアクションを実行しようとすると、機能しません。
元:
$loud=""
if [ -z $loud ]; then
route_devnull="1> /dev/null"
else
route_devnull=""
fi
echo "text to write to file but also not send to stdout" | tee -a $logfile $route_devnull
2 番目の例を機能させるにはどうすればよいですか? または、メッセージを抑制する別の方法を試す必要がありますか?
答え1
要約:echo "text to write to file but also not send to stdout" | eval tee -a $logfile $route_devnull
bash
変数をコマンドとして評価しません。次のように記述できます。
echo "abc && touch new"
そして、ターミナルに出力されますabc && touch new
。これは、ユーザーから文字列が入力される可能性があり、コンピューターを破壊しようとするなどの悪意のある行為が行われる可能性があるため、ユーザーのコマンドを信頼したくないという設計上の理由によるものです。
ここはeval
入って来る。
最初にコマンドを実行する代わりに、evalは読み取り、評価するすべての引数を使用して別のコマンドを構築し、それを実行します。例:
eval echo "abc && touch new"
実行前に評価したいものの前に突っ込むだけですeval
。そして「突っ込む」というのは、「使用について非常に慎重に考える」という意味ですeval
。