Bashスクリプトは、スクリプト出力を別々のログファイルに書き込みます。

Bashスクリプトは、スクリプト出力を別々のログファイルに書き込みます。

標準出力に日付とシステムの稼働時間を反映するためにscipt(example.sh)を作成しました。また、このスクリプトはこの出力をログファイルに書き込もうとしています。これは私のコードです

echo `date`
echo `uptime`

ついに

cat /home/rpeb/example.sh 1> /home/rpeb/example.log 

出力をログファイルにリダイレクトします。

最後の行を記録したくありません。このコードをどのように変更する必要がありますか?

ベストアンサー1

#!/bin/sh
{ date; uptime; } | tee "$HOME/example.log"

これにより、2つの出力が実行され、date現在のユーザーのホームディレクトリにあるファイルにパイプされます。uptimeteeexample.logそしてスクリプトの標準出力に。{ ...; }一連のコマンドを完全にリダイレクトできる「複合コマンド」に結合するために使用されます。

そうでない場合は、{ ...; }スクリプトで2つのリダイレクトを実行する必要があります。

#!/bin/sh
date   | tee    "$HOME/example.log"
uptime | tee -a "$HOME/example.log"

2番目の呼び出しでは、ログファイルにオプションを追加する必要がteeあります-a。そうしないと、ログファイルが切り捨てられ、コマンドの出力が失われますdate


echo通常、コマンド置換の結果だけを印刷したくありません。コマンドの置き換え(backtickコマンドまたは$(...))は、コマンドの出力を他のコマンドで使用される文字列に挿入するのに役立ちます。出力コマンドの結果にはコマンドの置き換えは必要ありませんecho(たとえば、コマンドラインでこれを行う必要もなく、echo $(ls)スクリプトでも実行する必要もありません)。

おすすめ記事