標準出力に日付とシステムの稼働時間を反映するために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
現在のユーザーのホームディレクトリにあるファイルにパイプされます。uptime
tee
example.log
そしてスクリプトの標準出力に。{ ...; }
一連のコマンドを完全にリダイレクトできる「複合コマンド」に結合するために使用されます。
そうでない場合は、{ ...; }
スクリプトで2つのリダイレクトを実行する必要があります。
#!/bin/sh
date | tee "$HOME/example.log"
uptime | tee -a "$HOME/example.log"
2番目の呼び出しでは、ログファイルにオプションを追加する必要がtee
あります-a
。そうしないと、ログファイルが切り捨てられ、コマンドの出力が失われますdate
。
echo
通常、コマンド置換の結果だけを印刷したくありません。コマンドの置き換え(backtickコマンドまたは$(...)
)は、コマンドの出力を他のコマンドで使用される文字列に挿入するのに役立ちます。出力コマンドの結果にはコマンドの置き換えは必要ありませんecho
(たとえば、コマンドラインでこれを行う必要もなく、echo $(ls)
スクリプトでも実行する必要もありません)。