Je comprends que la exec
redirection d'E / S peut être effectuée sur le shell actuel, mais je ne vois que l'utilisation comme:
exec 6<&0 # Link file descriptor #6 with stdin.
# Saves stdin.
exec 6>&1 # Link file descriptor #6 with stdout.
# Saves stdout.
D'après cela, je comprends que <
c'est pour le flux d'entrée, >
c'est pour le flux de sortie. Alors qu'est-ce que ça exec 3<&1
fait?
PS: j'ai trouvé cela à partir du code source de Bats
bash
shell
io-redirection
file-descriptors
exec
Zhenkai
la source
la source
exec 3<&1
diffère du fait3<&1
que ce dernier affectera une seule commande tandis que le premier affecte le shell actuel.Réponses:
De
bash manpage
:J'ai fait quelques debugs avec
strace
:Pour
3<&1
:Pour
3>&1
:Pour
2>&1
:Il semble que
3<&1
faire exactement la même chose que la3>&1
duplication de stdout vers le descripteur de fichier 3.la source
dup2()
syscall est utilisé pour tout type de descripteur de fichier;x>&y
vs vs de bashx<&y
est juste du sucre de syntaxe. De plus, lorsque stdio est attaché à un tty, le périphérique tty est très souvent ouvert en lecture + écriture et simplement dupliqué de 0 à 1 et 2.exec 3<&1
est donc identique àexec >&3
?exec 3>&1
.