シェルコマンドで>&はどういう意味ですか?

シェルコマンドで>&はどういう意味ですか?

実際には2つの質問があります。

  1. >&シェルスクリプトでは、これはどういう意味ですか/usr/bin/x_app >& /tmp/blog.txt&stdout / errorで作成するには、最後に数字を含める必要はありませんか?

  2. 私が知っている限り、これは上書きと追加なので、 stdoutをstderrに置き換える>必要がありますが、代わりにstdoutとstderrを一緒に使用することを意味します。なぜ我々はそれを使用しないのですか?私の言葉は、「追加」が「一緒になる」という意味ではありませんが、「上書きする」よりもそれに近いことを意味します。>>2>&1>>

ベストアンサー1

>& filestdoutとstderrをリダイレクトするcsh演算子(70年代後半)file。 Bourneシェル(やはり70年代後半)は、fd 1をにリダイレクトしてからfd 2を同じアドレスにリダイレクトする、またはのようになります> file 2>&12> file >&1fileファイル説明を開くあるいはその逆も。

zshbashKorn1シェル(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。互換性のため、後者のサポートも追加されました。> filezsh&>bash

さまざまなシェルでさまざまな構文を見つけることができます。rc(1980年代後半)および派生語(、、)では、esBourne構文が作成されましたakanga(そしてパイプの両端でfdを指定する方が簡単になりました:(fd 3のfd 3をviaパイプのfd 4にリンク))。の構文です。2>&1>[2=1]cmd1 |[3=4] cmd2cmd1cmd2{ cmd1 3>&1 >&5 5>&- | 4<&0 <&6 6<&- cmd2; } 5>&1 6<&0

fish様々なバリエーションのある住宅(2000年代半ば)I/O リダイレクト構文 Bourneシェルから。


1 Kornシェル(1980年代初頭)はBourneシェルに基づいていますが、エイリアス、チルダ拡張、中括弧拡張などのcshの機能も借用しました。

おすすめ記事