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.