Qual é o estado do fluxo de E / S padrão ao emitir um comando?

1

Sou novo no linux há dez dias e meu inglês não é bom. Estou aprendendo a parte de redirecionamento de E / S.

Eu sei que quando um comando é bem sucedido, a tela não exibe mensagem de erro, e o comando falhou tem um.

Por exemplo, quando eu digito cat file1 . Antes do comando emitido. Qual é o estado de stdin, stdout e stderr? Depois que eu emiti o comando. Qual é o estado do fluxo padrão?

Quando o arquivo1 existir. Na minha opinião, a entrada final é file1 e a saída final é o terminal. (Não tenho certeza; -0-) E eu não tenho uma mensagem de erro. Então, isso significa que eu não tenho stderr aqui? Ou onde está?

Quando não há arquivo existe. Eu tenho apenas uma mensagem de erro. Então, isso significa que eu não tenho stdin e redireciono o stderr para stdout?

Agradeço a você quem pode me explicar isso ou me dar alguma pista, como usar o man-page ou qualquer outra coisa.

    
por youxiao 05.09.2017 / 04:58

1 resposta

2

Em circunstâncias normais, stdin , stdout e stderr sempre existem:

ls -l /proc/self/fd

Mas nem todos eles são usados por todos os comandos. Você pode verificar onde um comando grava em:

> strace -e trace=write cat nonexistfile
write(2, "cat: ", 5cat: )                    = 5
write(2, "nonexistfile", 12nonexistfile)            = 12
write(2, ": No such file or directory", 27: No such file or directory) = 27
write(2, "\n", 1
)                       = 1

Ou mais simples: compare

command >/dev/null

com

command 2>/dev/null
    
por 05.09.2017 / 06:31