fd1 / fd2の代わりにfd 3を消費者にパイプする方法

fd1 / fd2の代わりにfd 3を消費者にパイプする方法

私はこのようなことをしたいと思います:

echo 'foo' >&3  3|  cat

基本的にfoo''を書き、3データ3cat。しかし、上記はうまくいきません。

bash: 3: Bad file descriptor

やりたいことを理解する人はいますか?

Node.jsの場合、ここに作業例があります。 https://gist.github.com/ORESoftware/0ad178f4512bbf956e54dd08f2412883

Node.jsのポイントでは、これは確実です。コマンドラインで次の操作を行います。

node foo.js 3> some-file.sh

ノードプロセスでは、我々は3ファイル記述子に書き込みます。

しかし、リダイレクトの代わりにパイプを使ってこれを行う方法を知りたいです。

このような:

node foo.js 3|  cat

ベストアンサー1

{ echo 'hello on fd3' >&3; } 3>&1 | cat

ここではecho標準出力が作成されますが、それをファイル記述子3にリダイレクトします(これはwNodeアプリケーションによって実行される書き込み操作に対応します)。次に、ファイルディスクリプタ3の出力を標準出力にストリーミングしますcat

また、標準出力も削除します。

{ echo 'hello on fd1'; echo 'hello on fd3' >&3; } 3>&1 1>/dev/null | cat

1つ目はecho標準出力に書き、2つ目は最初の例のリダイレクトを介してファイル記述子3に書き込みます。ファイル記述子3は標準出力に送信され(パイプ可能)、標準出力は削除されます。

inは1実際には必須ではなく、明確にするためにここに追加されました。1>/dev/null

両方のパイプはhello on fd3出力専用です。

ノードアプリケーションの場合:

node foo.js 3>&1 | cat

または、標準出力も破棄するには、次のようにします。

node foo.js 3>&1 1>/dev/null | cat

または、標準出力を標準エラー(デフォルトは端末)に送信します。

node foo.js 3>&1 1>&2 | cat

おすすめ記事