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
...
cat > file_name << blah
คือก่อนที่จะดำเนินcat
การstdoutของเปลือกเชื่อมต่อกับไฟล์ชื่อfile_name
แล้วstdinของเชลล์เชื่อมต่อกับhere-doc ?