プログラムの出力を見たくないときはいつでもこれを入力するのは本当に面倒です。もっと短い書き方があるかどうか知りたいです:
$ program >/dev/null 2>&1
汎用シェルが最適ですが、他のシェル、特にbashやdashについても知っておくと便利です。
>& /dev/null
このための関数を書くことができます:
function nullify() {
"$@" >/dev/null 2>&1
}
この機能を使用するには:
nullify program arg1 arg2 ...
もちろん、関数には好きな名前を付けることができます。たとえば、単一の文字にすることができます。
ちなみに、exec
リダイレクトstdout
と一時的stderr
に使用できます。/dev/null
これがあなたの場合に役立つかどうかはわかりませんが、共有することを考えました.
# Save stdout, stderr to file descriptors 6, 7 respectively.
exec 6>&1 7>&2
# Redirect stdout, stderr to /dev/null
exec 1>/dev/null 2>/dev/null
# Run program.
program arg1 arg2 ...
# Restore stdout, stderr.
exec 1>&6 2>&7
ほとんどのシェルはエイリアスをサポートしています。たとえば、私の .zshrc には次のようなものがあります。
alias -g no='2> /dev/null > /dev/null'
次に、入力するだけです
program no
/dev/null
が多すぎて入力できない場合は、(ルートとして)次のようにすることができます。
ln -s /dev/null /n
次に、次のことを実行できます。
program >/n 2>&1
ただし、もちろん、この方法で作成したスクリプトは、最初にそのシンボリックリンクを設定しない限り、他のシステムに移植することはできません。
編集:(:)
またはベースのソリューションは、を読み取らない|:
ため、エラーを引き起こす可能性があります。Zaz's answer で提案されているように、ファイル記述子を閉じるほど悪くはないかもしれませんが。:
stdin
bash および bash 準拠のシェル (zsh...) の場合:
$ program &>/dev/null
OR
$ program &> >(:) # Should actually cause error or abortion
すべてのシェルの場合:
$ program 2>&1 >/dev/null
OR
$ program 2>&1|: # Should actually cause error or abortion
$ program 2>&1 > >(:)
は、ファイル置換のプロセス置換権の操作を拒否するため、dash には機能しません。
説明:
2>&1
stderr (ファイル記述子 2) を stdout (ファイル記述子 1) にリダイレクトします。|
stdout から別のコマンドの stdin への通常のパイプです。:
何もしないシェル組み込みです (これは と同等ですtrue
)。&>
stdout と stderr の両方の出力をファイルにリダイレクトします。>(your-command)
プロセス代替です。特別なファイルへのパスに置き換えられます。たとえば: /proc/self/fd/6
. このファイルは、コマンドの入力ファイルとして使用されますyour-command
。注: クローズされたファイル記述子に書き込もうとするプロセスは、EBADF
(不正なファイル記述子) エラーを受け取ります| true
。後者はEPIPE
(パイプ) エラーを引き起こします。Charles Duffy のコメントを参照してください。
私には、最もポータブルなソリューションであり、最良の答えは、端末(PC)上のマクロであるように思われます。
そうすれば、どのサーバーにログインしても、常にそこにあります。
Windowsを実行している場合は、2行の小さなコードでAHK(google it、オープンソース)を使用して目的の結果を得ることができます。これにより、任意のキー文字列を他の任意のキー文字列にその場で変換できます。
「ugly.sh>>NULL」と入力すると、「ugly.sh 2>&1> / dev/null」などと書き換えられます。
他のプラットフォームのソリューションはやや困難です。AppleScriptはキーボードの押下を貼り付けることができますが、それを簡単にトリガーすることはできません。