comportamento inesperado ao usar a manipulação de redirecionamento

1

O comando abaixo é usado para copiar o descritor do arquivo de entrada de acordo com os manuais GNU:

exec 6<&0

Mas quando eu altero o operador de redirecionamento, o comando ainda funciona, mesmo que o descritor de arquivo '0' aponte para stdin:

exec 6>&0

Alguém pode explicar a razão por trás disso?

    
por Pankaj Pandey 17.12.2016 / 06:54

1 resposta

3

O Bash faz exatamente a mesma coisa para <& e >& , ou seja, usa a chamada de sistema dup() para fazer uma cópia de um descritor de arquivo.

Quaisquer erros devido a uma tentativa de gravar em um arquivo aberto para leitura, etc., acontecerão quando o descritor de arquivo for usado para leitura ou escrita, ao contrário do modo como foi aberto.

Inicialmente, um Bash interativo tem /dev/tty aberto para leitura-gravação como descritores de arquivo 0, 1 e 2.

Veja O que o exec 3 & lt; & amp; 1 faz no Unix & amp; ; Linux SE, onde o usuário cuonglm se deu ao trabalho de documentar esse comportamento usando strace .

    
por AlexP 17.12.2016 / 10:16