Bash에서 여러 여기 문서를 사용할 수 있습니까?

Bash에서 여러 여기 문서를 사용할 수 있습니까?

bash에서 명령에 대한 입력을 제공하기 위해 여러 here-doc를 사용할 수 있습니까?

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

분명히 두 경우 모두 두 번째 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이 하나만 있기 때문에 표준 입력은 하나만 있을 수 있습니다.

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을 파이프의 다른 쪽 끝으로 리디렉션합니다.

파일 이름이 에 전달되면 catcat이상 표준 입력에서 읽혀지지 않습니다. 다음을 수행해야 합니다.

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__

관련 정보