Por que o redirecionamento da saída do nginx não funciona?

0

Eu quero listar todos os módulos de nginx servidor por linha, então eu digite o seguinte:

nginx -V | tr -- - '\n'

Mas não coloca módulos em linhas. Se eu fizer assim:

2>&1 nginx -V | tr -- - '\n'

funciona. Mas por quê?

    
por Max Wizard K 08.11.2014 / 10:54

1 resposta

2

O que você está observando indica que nginx -V grava sua saída no fluxo de erro padrão (também conhecido como stderr - no descritor de arquivo 2 ) em vez do fluxo de saída padrão (também conhecido como stdout - file descriptor 1 ). Somente stdout é passado pelo canal | , portanto, o comando tr não o recebe.

A sintaxe 2>&1 diz ao shell para redirecionar stderr para stdout , de modo que seja canalizado para tr . FYI o posicionamento que você usou é sintaticamente legal, mas não convencional - na maioria das vezes esse tipo de redirecionamento seria escrito como

nginx -V 2>&1 | tr -- - '\n'

BTW o canal | está realmente redirecionando a saída do primeiro comando ao invés da entrada do segundo, que vem do fluxo de entrada padrão ( stdin - descritor de arquivo 0 ) como de costume.

    
por steeldriver 08.11.2014 / 13:31