`>&`の2つのバージョンのうち、[[n]>&/dev/tcp/localhost/9999`に使用されるバージョンは何ですか?

`>&`の2つのバージョンのうち、[[n]>&/dev/tcp/localhost/9999`に使用されるバージョンは何ですか?

/dev/tcp/localhost/9999整数(ファイル記述子)として解釈されるのかファイル名として解釈されるのかわかりません。

だからよく分からない」標準出力と標準エラーリダイレクト「(1)または」ファイル記述子のコピーBashマニュアルのセクション(2)は上記のリダイレクトに適用されます。

リダイレクトは指定の有無にかかわらず機能しますnが、(1)パラメータは使用しませんn。これは、(1)が使用されていないという意味ですか?

また、/dev/tcp/localhost/9999ファイル名(整数ではない)と見なされた場合、以下の<&1コマンドが機能するのはなぜですか? :

/bin/bash >&/dev/tcp/localhost/9999 <&1

この場合1(stdout)は、入力用に開いているファイル記述子ではないため、(2)が失敗しますか?

ベストアンサー1

/dev/tcp/host/port<>、または<>(および>&または&>で)使用するかどうかにかかわらず、常にbash読み書きするために開きます。

>& /dev/tcp/host/porthost:port標準出力と標準エラーに接続してリダイレクトします。

ハッカーは、および内部的にを/dev/tcp使用していて、まるで読み取りまたは書き込み用にのみ開くファイル記述子であるかのようにtcpソケットを使用する明確で一貫した方法はありません。socket(2)connect(2)

ファイル記述子が 1 番で自分を stdout と呼んでも入力ができないという意味ではありません。cat <&1端末でも使用できます。

リダイレクトは n 指定の有無にかかわらず動作しますが、(1) は n パラメータを使用しません。これは、(1)が使用されないことを意味します。

ここではありません。

true 3>&/dev/tcp/127.0.0.1/9999
bash: /dev/tcp/127.0.0.1/9999: ambiguous redirect

おすすめ記事