Eu queria redirecionar mc
a página man do para um arquivo de texto usando man mc > mc
, mas executei acidentalmente man mc > mc grep
. O resultado foi um arquivo de texto chamado mc
contendo duas mc
páginas de manual concatenadas.
Eu então tentei man ls > 1 abc
, o que resultou em um arquivo de texto chamado 1
contendo a ls
página man e uma mensagem de erro no terminal: No manual entry for abc
.
A seguir tentei man du > du ls tac
. Eu esperava três du
páginas de manual concatenadas, mas o que realmente resultou foi um arquivo de texto chamado du
contendo as páginas de manual de du
e ls
concatenadas tac
.
Por que cada comando produziu os resultados que produziu?
Isso é consistente com uma parte relativamente obscura do manual do Bash, que afirma na seção Shell Grammar :
(ênfase minha.)
O que isso significa é que você pode "misturar" qualquer redirecionamento com o comando e seus argumentos.
Por exemplo,
echo > world hello
é equivalente aecho hello > world
.Em outras palavras, quando você executa um comando como
man du > du ls tac
, é equivalente a executar:Que essas três páginas de manual acabem concatenadas em um arquivo chamado
du
é o resultado de comoman
se comporta quando sua saída está sendo redirecionada ou canalizada: ela não tentará mais usar um pager e atuará essencialmente comocat
.Apenas para referência/curiosidade:
Eu sei que não estou respondendo sua pergunta, mas caso você precise redirecionar o conteúdo de uma página de manual, você pode fazê-lo com col(1)
man 1 col | col -b -x > manfile.foo