ファイル記述子3-255の/dev/stdoutに対応するものはありますか?

ファイル記述子3-255の/dev/stdoutに対応するものはありますか?

/dev/stdoutファイル名を渡して、ファイルが標準出力にパイプされることを期待するコマンドラインユーティリティをだますことが多いことがわかります。

stdout/代わりに、番号付きのファイル記述子にパイプするようにツールを設定できるかどうか疑問に思います。代わりにstderrパイプするには、次のことができます。stderrstdout

command 2>&1 >/dev/null | grep 'something'

私の質問をより具体的にするには(最小再現可能な例):パイピングのために(特定のツールについて尋ねるものではありません。どんなアイデアもあるようです)、代わりにファイル記述子/dev/stdout番号3で出力が終わるようにここで何を変更する必要がありますか?stdout使用できるので、文字列をfd 3に追加します/dev/stdout

cp a /dev/stdout

cp通常、ファイルパスが必要なコマンドに置き換えられました。

効果的ですか/dev/3/dev/stdoutfd 1の代わりにfd 3のアナログを探しています。

質問を別の方法で置き換えるには:

file descriptor 1 is to /dev/stdout 
what 
file descriptor 3 is to ???

代わりにここで何を使うべきですか????

私は広く検索しましたが、何も見つかりませんでした。

ベストアンサー1

多くのシステム(すべてではありません!)では、/dev/fd/これはファイルハンドルのディレクトリです。 Linuxでは通常はへのリンクですが、/proc/self/fdNetBSD9(たとえば)では実際のディレクトリです。

だから

% ( cat a > /dev/fd/9) 9>&1 >/dev/null | grep .
foo

しかし、cp使用するシェルによって異なります。

ksh93を使用するCentOS7で...

% cp a /dev/fd/9 9>&1 >/dev/null | cat
cp: cannot create regular file '/dev/fd/9': No such device or address

/dev/fd/9これは通常のファイルではないからです。しかし〜〜に応じてbash...

$ cp a /dev/fd/9 9>&1 >/dev/null | cat
foo

効率的!

ご覧のとおり、これはすべてのプラットフォームに存在することは保証されておらず、同じプラットフォームのシェル間でも移植可能ではありません!

おすすめ記事