実際には2つの質問があります。
>&
シェルスクリプトでは、これはどういう意味ですか/usr/bin/x_app >& /tmp/blog.txt
?&
stdout / errorで作成するには、最後に数字を含める必要はありませんか?私が知っている限り、これは上書きと追加なので、 stdoutをstderrに置き換える
>
必要がありますが、代わりにstdoutとstderrを一緒に使用することを意味します。なぜ我々はそれを使用しないのですか?私の言葉は、「追加」が「一緒になる」という意味ではありませんが、「上書きする」よりもそれに近いことを意味します。>>
2>&1
>>
ベストアンサー1
>& file
stdoutとstderrをリダイレクトするcsh演算子(70年代後半)file
。 Bourneシェル(やはり70年代後半)は、fd 1をにリダイレクトしてからfd 2を同じアドレスにリダイレクトする、またはのようになります> file 2>&1
。2> file >&1
file
ファイル説明を開くあるいはその逆も。
zsh
bash
Korn1シェル(Bourneシェル拡張)とcshの機能を採用し、>&
Bourne / Korn演算子に加えてcsh演算子をサポートする2つのシェル(1980年代後半、1990年代初頭)があります。[i]>&j
しかし二人は葛藤を経験する。
cmd >& "$var"
$var
数値が含まれている場合は最終的にBourne / Kornリダイレクトが行われ、それ以外の場合はcshリダイレクトが行われます。
実際、cmd > "$var2" 2>&1
これらのシェルでは、csh演算子を使用せずにBourne構文()を使用して驚きを避けるのが最善です。
cshは最初はbash
サポートされていませんが、>&
同じ&>
機能がサポートされています。これはBourne構文とも競合します。 Bourneシェルで並列に実行cmd &> file
しますcmd
。互換性のため、後者のサポートも追加されました。> file
zsh
&>
bash
さまざまなシェルでさまざまな構文を見つけることができます。rc
(1980年代後半)および派生語(、、)では、es
Bourne構文が作成されましたakanga
(そしてパイプの両端でfdを指定する方が簡単になりました:(fd 3のfd 3をviaパイプのfd 4にリンク))。の構文です。2>&1
>[2=1]
cmd1 |[3=4] cmd2
cmd1
cmd2
{ cmd1 3>&1 >&5 5>&- | 4<&0 <&6 6<&- cmd2; } 5>&1 6<&0
fish
様々なバリエーションのある住宅(2000年代半ば)I/O リダイレクト構文 Bourneシェルから。
1 Kornシェル(1980年代初頭)はBourneシェルに基づいていますが、エイリアス、チルダ拡張、中括弧拡張などのcshの機能も借用しました。