Here-Document est une sorte de redirection de shell, donc le shell l'exécutera comme une redirection normale, du début à la fin (ou de gauche à droite, ou l'ordre d'apparition). Ceci est défini par POSIX:
Si plusieurs opérateurs de redirection sont spécifiés avec une commande, l'ordre d'évaluation est du début à la fin.
Dans votre commande, cat
exécutera d' > conf
abord, ouvrir et tronquer le conf
fichier pour l'écriture, puis lire les données de Here-Document
.
En utilisant strace
, vous pouvez le vérifier:
$ 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'est qu'avant l'exécution,cat
la sortie standard du shell est connectée au fichier nomméfile_name
, puis stdin du shell est connecté à here-doc ?open
été appelé avantdup2
.Eh bien, découvrons:
Dang. Je suppose que ça doit être la
>"$file"
première partie alors. Mais si...?...pas d'erreur...?
Il semble que l'ordre soit important.
la source
Lorsque
bash
crée le processus à exécutercat
, il s'ouvreconf
pour l'écriture sur le descripteur de fichier 1 et ouvre un fichier temporaire (pour le document ici) pour la lecture sur le descripteur de fichier 0, avant deexec
lancer le programme. Dans ce cas, peu importe l'ordre dans lequel ces actions se produisent.L'ordre devient significatif lorsque les descripteurs de fichiers sont réaffectés, par exemple avec
2>&1
.la source