Por que 2 e 1 (redireciona stderr para stdout) com & - & - 2 & - (fecha stdin, stdout, stderr)?

4

Por que alguém faria isso

(exec <&- >&- 2>&-; gzip somefile.txt) 2>&1 &

< & - > & 2; > & - "... significa fechar stdin, stdout e stderr, respectivamente .."

mas por que "2 > & 1" se está fechado?

    
por american-ninja-warrior 11.09.2018 / 19:03

2 respostas

2

A declaração mencionada está incorreta porque os descritores de arquivo padrão devem estar abertos.

Especificação POSIX: C.2.7 Redirecionamento

Applications should not use the [n]<&- or [n]>&- operators to execute a utility or application with file descriptor 0 not open for reading or with file descriptor 1 or 2 not open for writing, as this might cause the executed program (or shell built-in) to misbehave. In order not to pass on these file descriptors to an executed utility or application, applications should not just close them but should reopen them on, for example, /dev/null. Some implementations may reopen them automatically, but applications should not rely on this being done.

A instrução preferiria ser

gzip somefile.txt >/dev/null 2>&1 &
    
por 12.09.2018 / 08:46
1

Não há motivos para fazer o que eles fizeram. O 2>&1 é de fato completamente redundante nesse exemplo.

    
por 12.09.2018 / 02:06