編集者注:この質問は、問題の性質を変更するいくつかの改訂を受けており、古いコメントや回答が無効になる可能性があります。元のタイトルは「Bash 出力を /dev/null にリダイレクトできません」でした。
サイレント モードを実装したい小さな Bash スクリプトを作成しようとしています。-v
基本的に、デフォルトでほとんどの出力を非表示にし、で実行した場合に備えて、すべての出力を表示したいと思います。
したがって、スクリプトの冒頭に次のように記述しました。
#!/bin/bash
declare output=''
if [ "$1" = -v ]; then
output="&1"
else
output="/dev/null"
fi
次に、スクリプトに次のものがあります。
{
# whatever commands...
} > $output 2>&1
サイレントモードはうまく機能します。ただし、詳細モードを試すと、&
または(変数&1
に基づいて) という名前のファイルが作成されます。output
また、ファイルは空です。これは望ましい結果ではありません。出力を端末に残しておきたいのです。
これはリダイレクトの順序によるものですか、それとも私の変数が間違っているのでしょうか? "&1"
編集:出力値をに置き換えることで、スクリプトが完全に機能するようになりました"/dev/tty"
。