답변:
Here-Document 는 일종의 쉘 리디렉션이므로 쉘은 처음부터 끝까지 (또는 왼쪽에서 오른쪽으로 또는 모양 순서대로) 일반적인 리디렉션으로 수행합니다. 이것은 POSIX에 의해 정의됩니다.
명령에 둘 이상의 리디렉션 연산자가 지정된 경우 평가 순서는 처음부터 끝까지입니다.
당신의 명령에서 cat
수행 > conf
첫째, 개방 및 잘라 내기 conf
에서 데이터를 다음, 쓰기, 읽기 위해 파일을 Here-Document
.
를 사용하여 strace
확인할 수 있습니다.
$ strace -f -e trace=open,dup2 sh -c 'cat > conf << EOF
var1="cat"
var2="dog"
var3="hamster"
EOF
'
...
open("conf", O_WRONLY|O_CREAT|O_TRUNC, 0666) = 3
dup2(3, 1) = 1
dup2(3, 0) = 0
...
open
전에 호출되었다 볼 수 있습니다 dup2
.
자, 알아 봅시다 :
unset file
cat >"$file" <<EOF
this is not in ${file=./myfile}
EOF
bash: : No such file or directory
댕 >"$file"
그때 먼저 그 일을해야한다고 생각합니다 . 하지만 만약에 ...?
unset file
<<EOF cat >"$file"
this is in ${file=./myfile}
EOF
... 오류 없음 ...?
cat ./myfile
this is in ./myfile
표시되는대로 주문이 중요합니다.
cat > file_name << blah
것으로는 실행하기 전에되어 표준 출력 라는 이름의 파일에 연결되어있는 쉘을 다음과 stdin을 쉘에 연결되어 여기-문서 ?cat
file_name