Entiendo que exec
puede hacer la redirección de E / S en el shell actual, pero solo veo el uso como:
exec 6<&0 # Link file descriptor #6 with stdin.
# Saves stdin.
exec 6>&1 # Link file descriptor #6 with stdout.
# Saves stdout.
De eso entiendo que <
es para el flujo de entrada, >
es para el flujo de salida. Entonces, ¿qué hace exec 3<&1
?
PD: encontré esto del código fuente de Bats
bash
shell
io-redirection
file-descriptors
exec
Zhenkai
fuente
fuente
exec 3<&1
difiere de3<&1
que este último afectará a un solo comando, mientras que el primero afecta al shell actual.Respuestas:
De
bash manpage
:Hice algunas depuraciones con
strace
:Para
3<&1
:Para
3>&1
:Para
2>&1
:Parece que
3<&1
hacer exactamente lo mismo que3>&1
duplicar stdout al descriptor de archivo 3.fuente
dup2()
se utiliza la misma llamada al sistema para cualquier tipo de descriptor de archivo; bashx>&y
vsx<&y
es solo sintaxis de azúcar. Además, cuando stdio está conectado a un tty, el dispositivo tty a menudo se abre para leer + escribir y simplemente se duplica de 0 a 1 y 2.exec 3<&1
es igual queexec >&3
?exec 3>&1
.