Here-Document é um tipo de redirecionamento de shell, portanto, o shell o executará como redirecionamento normal, do começo ao fim (ou da esquerda para a direita ou ordem de aparência). Isso é definido pelo POSIX:
Se mais de um operador de redirecionamento for especificado com um comando, a ordem da avaliação será do começo ao fim.
No seu comando, cat
você executará > conf
primeiro, abrir e truncar o conf
arquivo para gravação e, em seguida, ler os dados Here-Document
.
Usando strace
, você pode verificar:
$ 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
é que, antes de executar,cat
o stdout do shell é conectado ao arquivo nomeadofile_name
e o stdin do shell é conectado ao here-doc ?