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
на стандартний висновок з оболонки пов'язаний з файл з ім'ям ,file_name
а потім стандартний ввід оболонки підключається до тут-документ ?