stdoutからstderrに数行をコピーします。ただし、stderrがstdoutと異なる場合にのみ適用されます。

stdoutからstderrに数行をコピーします。ただし、stderrがstdoutと異なる場合にのみ適用されます。

バックアップ中に転送されたすべてのファイルを含むすべてを標準出力に印刷するbashスクリプト "backup.sh"があります。

全体の出力を維持したいが呼び出されたとき

./backup.sh 2>stderr.log

その後、stdoutからstderr.logにいくつかの重要な行をコピーするだけです。

私のスクリプトは現在、次の関数を使用してこれらの重要な行を印刷します。

errEcho() {
    echo "$1"
    echo "$1" 1>&2
}

echo "Some info message"
errEcho "Very important message"

しかし、今誰かが単にスクリプトを呼び出すと

./backup.sh

その後、errEcho 行が標準出力に複製されます。

この問題を解決するための最良の方法は何ですか? (実際にstdout == stderrの場合、スクリプトが認識して出力をstderrにスキップしたいのですが、非常に異なるアプローチが必要かどうかはわかりません。)

注:私は2つのスクリプトをしたくありません。そのうちの1つは "backup.sh 2>stderr.log"を呼び出します。

ベストアンサー1

あなたは明らかに過度のエンジニアリングをしています。

メッセージラインの印刷ただそしてstdoutエラーメッセージただ到着するstderr。問題が解決しました。

コンソールでスクリプトを実行して情報メッセージを非表示にするには、>/dev/nullリダイレクトを使用します。これにより、エラー行のみが表示されます。

おすすめ記事