Here-Document là một loại chuyển hướng vỏ, vì vậy shell sẽ thực hiện nó như chuyển hướng bình thường, từ đầu đến cuối (hoặc từ trái sang phải hoặc thứ tự xuất hiện). Điều này được xác định bởi POSIX:
Nếu có nhiều hơn một toán tử chuyển hướng được chỉ định bằng một lệnh, thứ tự đánh giá là từ đầu đến cuối.
Trong lệnh của bạn, cat
sẽ thực hiện > conf
đầu tiên, mở và cắt conf
tệp để ghi, sau đó đọc dữ liệu từ đó Here-Document
.
Sử dụng strace
, bạn có thể xác minh nó:
$ 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
được rằng trước khi thực hiệncat
các thiết bị xuất chuẩn của vỏ được kết nối với file có tênfile_name
và sau đó stdin vỏ được kết nối với ở đây-doc ?