다음 명령에서 cat은 here-doc의 내용을 가져 와서 conf라는 파일로 리디렉션합니다.
cat > conf << EOF
var1="cat"
var2="dog"
var3="hamster"
EOF
여기서 명령 순서를 이해하는 방법은 무엇입니까? 합니까 bash
첫번째 프로세스의 모든 것을 다른 사람 (여기-문서 일부) 및 최종 단계로는이 보이는 > conf
부분을?
답변
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
...
답변
자, 알아 봅시다 :
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
표시되는대로 주문이 중요합니다.
답변
때 bash
실행에 대한 프로세스를 생성 cat
, 그것은 열리는 conf
파일 기술자 1에 쓰기 위해 그리고 전에, 파일 기술자 0에 읽기 (여기에-문서) 임시 파일을 여는 exec
프로그램을 보내고. 이 경우 실제로 어떤 순서로 작업이 수행되는지는 중요하지 않습니다.
파일 디스크립터를 재 할당 할 때 순서가 중요해집니다 (예 🙂 2>&1
.