여러 가지 방법이 있습니다. 가장 간단한 방법은 다음과 같습니다.
cat <<EOF | sh
touch somefile
echo foo > somefile
EOF
내 의견으로는 더 좋은 구문입니다.
(
cat <<EOF
touch somefile
echo foo > somefile
EOF
) | sh
서브 쉘 없이도 작동합니다.
{
cat <<EOF
touch somefile
echo foo > somefile
EOF
} | sh
더 많은 변형 :
cat <<EOF |
touch somefile
echo foo > somefile
EOF
sh
또는:
{ cat | sh; } << EOF
touch somefile
echo foo > somefile
EOF
그건 그렇고, cat
귀하의 질문에 사용하는 것이 다른 것에 대한 자리 표시 자라고 생각합니다. 그렇지 않은 경우 다음과 같이 꺼내십시오.
sh <<EOF
touch somefile
echo foo > somefile
EOF
이것으로 단순화 될 수 있습니다 :
sh -c 'touch somefile; echo foo > somefile'
또는:
sh -c 'touch somefile
echo foo > somefile'
배관 대신 출력 재 지정
sh >out <<EOF
touch somefile
echo foo > somefile
EOF
를 사용 cat
하여 다음에 해당합니다 echo test > out
.
cat >out <<EOF
test
EOF
여러 문서
( cat; echo ---; cat <&3 ) <<EOF 3<<EOF2
hi
EOF
there
EOF2
출력이 생성됩니다.
hi
---
there
진행중인 작업은 다음과 같습니다.
- 쉘은를보고
( ... )
서브 쉘에서 동봉 된 명령을 실행합니다.
- 고양이와 에코는 충분히 간단합니다. 는
cat <&3
파일 기술자와 고양이를 실행 말한다 (FD) 0 (표준 입력) FD 3에서 재; 다시 말해, fd 3의 입력을 제거하십시오.
- 시작하기 전에
(...)
셸은 여기에있는 두 개의 문서 리디렉션을보고 fd 0 ( <<EOF
) 및 fd 3 ( 3<<EOF2
)을 파이프의 판독면으로 대체합니다.
- 초기 명령이 시작되면 쉘은 EOF에 도달 할 때까지 stdin을 읽고이를 첫 번째 파이프의 쓰기 측으로 보냅니다.
- 다음으로 EOF2 및 두 번째 파이프의 쓰기 측과 동일합니다.
touch
거기에 있지 않으면 정확히 무엇을 원하는가? 입력 파일을 읽고 stdout을 사용하여 다른 파일로 리디렉션합니까?