入力リダイレクトを使用したプロセスの交換

入力リダイレクトを使用したプロセスの交換

プロセス置換と組み合わせた入力リダイレクトを理解しようとしています。bash3つを使っています。

trは次のとおりです。

$ tr "o" "a" <(echo "Foo")
tr: extra operand `/dev/fd/63'
Try `tr --help' for more information.

なぜこれがうまくいかないのか理解していると思います。プロセス置換は、標準入力のみを読み取る<( )ファイル記述子を生成します。tr

正しいリダイレクトで機能させるにはどうすればよいですか?

私は単にパイプを使用できることを知っています。

$ echo "Foo" | tr "o" "a"
Faa

しかし、私はより良い理解を得るために努力しています。man bashの助けを借りていくつか試しましたが、実際に<&何をしているのかわかりません。

プロセス置換を正しく使用する方法はtr

答え1

あなたは本当に親しいです:

tr "o" "a" < <(echo "Foo")

置換は<()ファイル記述子を生成し、パスをシェルに貼り付けます。わかりやすいように、以下を実行してください。

<(echo blubb)

エラーが表示されます。

-bash: /dev/fd/63: Permission denied

そのため、単純なパイプなので、/dev/fd/63シェルに貼り付けて実行することはできません。上記の例/dev/fd/63は、パイプに書き込むコマンドと入力リダイレクトを介してファイル記述子から読み取るコマンドです。trecho "Foo"<tr

答え2

見つけました。バッシュキップの説明シリーズは、これらすべてについてもっと学ぶのに最適です。

特に、上記の記事はすべて入力リダイレクトに関するものです。

上記の特定の例を解決するには:

> tr "o" "a" <<< $(echo "Foo")
Faa

関連情報