>
apenas redireciona a saída padrão ( stdout
), mas quando whatis
não consegue encontrar informações sobre um arquivo, ele grava isso em um fluxo diferente, stderr
. Você também pode redirecionar isso com 2>
, pois stderr
é o identificador de arquivo 2. Você pode redirecionar stdout e stderr como &>
ou pode redirecionar stderr para stdout fazendo 2>&1
Você pode ler tudo sobre o redirecionamento aqui
Então, no seu exemplo, se você quiser que todos os erros, bem como o sucesso, acabem em blah
, você pode fazer
whatis 'ls /bin' &> blah
ou, usando a sintaxe de subshell alternativa que é preferida atualmente:
whatis $(ls /bin) &> blah
Embora o /bin
provavelmente não tenha um, tenha cuidado ao fazer coisas como essa. Os resultados de ls /bin
estarão sujeitos à divisão de palavras, portanto, se algum arquivo contiver espaços, digamos, eles serão tratados como argumentos diferentes para whatis
. É por isso que você é geralmente desencorajado a analisar a saída de ls
(veja esta questão para uma discussão sobre isso)
você pode fazer o que você está tentando de maneira diferente, como
find /bin -maxdepth 1 -type f -exec whatis {} + &> blah
que vai olhar em /bin
e não ir mais fundo (como o glob), em seguida, encontrar apenas arquivos (o argumento type f
) e para cada coisa que achar que vai executar whatis
, então faça o mesmo redirecionamento tinha falado sobre.