このリダイレクトの違いは何ですか?
some-program &> some_file
これ?
some-program > some_file 2>&1
答え1
Inbash
とzsh
Shellには2つの間に違いはありません。リダイレクトは&>file
POSIX標準の拡張として実装された構文砂糖であり、その意味は標準とまったく同じです>file 2>&1
。
非インタプリタによって実行されるスクリプトでリダイレクトを使用すると、スクリプトが興味深い&>
方法で中断される可能性があります。とは互いに独立して解釈されるからです。bash
zsh
&
>
some_command &>file
-bash
/ 以外のスクリプトでは、zsh
次のように結合されます。
some_command & >file
そして
some_command &
>file
これはsome_command
バックグラウンドジョブから始まり、名前付きファイルを切り捨てたり作成しますfile
。
また関連:
答え2
第二形態POSIX互換、すべてのPOSIXシェルで動作します。
最初の形式はまったく同じですが、短縮形式(例:2つの例では、BashとZsh)をサポートするシェルでのみ機能し、他の形式(Dash、/bin/sh
Debian、および派生型など)の実装では失敗します。 )。
移植性が重要な場合は、2段階形式を使用する必要があります。