Entiendo que execpuede 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<&1difiere de3<&1que 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<&1hacer exactamente lo mismo que3>&1duplicar stdout al descriptor de archivo 3.fuente
dup2()se utiliza la misma llamada al sistema para cualquier tipo de descriptor de archivo; bashx>&yvsx<&yes 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<&1es igual queexec >&3?exec 3>&1.