Entendo que é exec
possível fazer o redirecionamento de E / S no shell atual, mas só vejo uso como:
exec 6<&0 # Link file descriptor #6 with stdin.
# Saves stdin.
exec 6>&1 # Link file descriptor #6 with stdout.
# Saves stdout.
Pelo que entendi, isso <
é para fluxo de entrada, >
é para fluxo de saída. Então o que exec 3<&1
faz?
PS: Encontrei isso no código-fonte do Bats
bash
shell
io-redirection
file-descriptors
exec
Zhenkai
fonte
fonte
exec 3<&1
difere de3<&1
que o último afetará um único comando, enquanto o primeiro afeta o shell atual.Respostas:
De
bash manpage
:Eu fiz alguns debugs com
strace
:Para
3<&1
:Para
3>&1
:Para
2>&1
:Parece que
3<&1
faz exatamente o mesmo que3>&1
, duplicando o stdout no descritor de arquivo 3.fonte
dup2()
syscall é usado para qualquer tipo de descritor de arquivo; festançax>&y
vsx<&y
é apenas açúcar sintaxe. Além disso, quando stdio é anexado a um tty, o dispositivo tty é muitas vezes aberto para + write leitura e apenas dupliquei 0-1 e 2.exec 3<&1
é o mesmo queexec >&3
?exec 3>&1
.