Bashで複数のここでドキュメントを使用できますか?

Bashで複数のここでドキュメントを使用できますか?

bashでコマンドへの入力を提供するために複数のhere-docを使用できますか?

$ cat <<<foo <<<bar
bar
$ cat <<EOF1 <<EOF2
> foo
> EOF1
> bar
> EOF2
bar

明らかに、どちらの場合も、2番目のhere-docが標準入力として使用され、最初の参照を置き換えます。代わりにsを使用することは解決策ですかecho

$ cat <(echo -n foo) <(echo bar)
foobar

また、何らかの理由で組み合わせを使用することは私には適していません。なぜですか?

$ cat <<<foo <(echo bar)
bar
$ cat <(echo -n foo) <<<bar
foo

ベストアンサー1

あなたはできます:

cat /dev/fd/3 3<< E1 /dev/fd/4 4<< E2
foo
E1
bar
E2

ファイル記述子0が1つしかないため、標準入力は1つしかありません。

cat << EOF
eof
EOF

略語は次のとおりです。

cat /dev/fd/0 0<< EOF
eof
EOF

そして:

cat <<< foo

例:

cat /dev/fd/0 0<<< foo

ファイル記述子0で何を開くかを決定する必要があります。

cat <(echo foo)

例:

cat /dev/fd/123

パイプのファイル記述子はどこに123あり、同時にbashはecho foo他のプロセスで実行されており、stdoutをパイプのもう一方の端にリダイレクトします。

ファイル名がに渡されると、cat標準cat入力から読み込まれなくなります。以下を行う必要があります。

cat <(echo foo) /dev/fd/0 << EOF
bar
EOF

または:

cat <(echo foo) - << EOF
bar
EOF

(標準入力から読み取るように-指示します)。cat

おすすめ記事