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
答え2
複数の使用cat
:
cat <<'__END_OF_USAGE__'; cat <<__END_OF_TOOLS__
Usage of the script: ...
This section does not expand parameters.
__END_OF_USAGE__
Here's a list of tools provided by this script:
$(grep -F tools <"$0")
__END_OF_TOOLS__