スクリプトコマンドの出力を非表示にする

スクリプトコマンドの出力を非表示にする

特定のコンピューターを最適な設定で自動的に構成するシェル スクリプトを作成しています。このスクリプトからの出力を、エコー出力を除いてすべて非表示にしたいのですが、可能ですか?

答え1

スクリプトを次のように開始します。

exec 3>&1 1>/dev/null 2>&1

これにより、stdout の元のファイル記述子が &3 に保存され、stdout と stderr が /dev/null にリダイレクトされます。何かを印刷するときは、次のように出力を &3 にリダイレクトします。

echo "This message won't be output"
echo "But this one will" >&3

その詳細を隠したい場合は、fd 3 にエコーする関数を定義するだけです。

say() {
    echo >&3 "$@"
}

say "This goes to the log"

答え2

stdoutをリダイレクトするには、以下を/dev/null追加します。

1>/dev/null

出力を生成するスクリプトの各行の末尾に。

同じようにエラーをリダイレクトするには、

2>/dev/null

ほとんどのコマンドには、コンソールへの通常の出力をオフにするオプションもあります-q。使用するコマンドのマニュアルページを確認してください。

関連情報