現在私はこれをラッパースクリプトに入れました。
2>&1 ./update.sh | ts | tee -a ./update.log
update.shから:
if apt full-upgrade -y | grep linux-headers
then
echo
echo Need to Fix the Capture Driver!
fi
(ドライバを自動的に修正する追加のロジックがありますが、理解しているようです。)
apt full-upgrade
動作しますが、端末またはログファイルに出力全体が表示されません。一致するコンテンツのみを取得しますgrep
。
before、then、およびbefore一時ファイルにtee
フル出力を実行できますが、apt full-upgrade
端末全体とログを取得してロジックを保存するよりも良い方法はありますか?if
grep
rm
答え1
/dev/stdout
パイプを指しているため、ここでは使用できません。 1つのアプローチは、スクリプトの生のstdoutコピーを取得して印刷することですtee
(テストされていません)。
exec 9>&1 # make fd 9 a copy of the current stdout
apt full-upgrade -y | tee /dev/fd/9 | grep linux-headers
exec 9>&- # close fd 9
出力全体を常に端末に送信するには、次のものを使用できます/dev/tty
。
apt full-upgrade -y | tee /dev/tty | grep linux-headers
ただし、これにより、スクリプト全体にどのリダイレクトが適用されても、出力が端末に移動します。
場合によっては、プロセス置換を使用して出力をstdout以外のコマンドにリダイレクトできます。
apt full-upgrade -y | tee >(grep linux-headers)
ただし、シャットダウン状態が必要であり、grep
プロセスの交換により簡単に取得できないため、ここでは機能しません。