Em geral, eu recomendaria seguir a maneira de fazer as coisas do Bourne-again SHell , já que o bash é sem dúvida o shell Unix mais popular do mercado. O Bash normalmente usa &>
ou 2>&1
. IMHO, nem é "perfeito", então eu recomendo esquecer essa bobagem. Realisticamente, qual deles você deve usar depende do que você está tentando fazer.
2>&1
mescla stderr com stdout, o que pode ser útil se, por exemplo, você desejar canalizar texto stderr. Portanto, por exemplo, se você deseja ver se um programa imprime uma determinada mensagem stderr, mas não deseja que sua tela seja preenchida com (provavelmente) lixo desnecessário, você pode fazer algo assim program 2>&1 | grep crashed
, que pesquisará o stdout e o stderr em um programa chamado "programa" para a palavra "travou".
Por outro lado, se você não quer que um programa imprima nada, você pode simplesmente executar program &> /dev/null
, o que redirecionará o stderr e o stdout para / dev / null, um arquivo especial que magicamente faz as coisas desaparecerem. Ou, se você deseja salvar a saída de um programa (talvez para relatar um bug ou algo assim), você pode redirecionar stderr e stdout para um arquivo: program &> log.txt
redirecionará todos os dados para um arquivo chamado "log.txt". Se você quiser, poderá redirecionar o stdout e o stderr via program 2> log.txt > log.txt
ou program 2>&1 | cat > log.txt
, ambos os quais terão o mesmo efeito que o uso &>
. Se você fizer algo assim program 2>&1 > file
, apenas o stdout será redirecionado, mas o stderr ainda poderá ser canalizado para outro programa, como o gato, que poderá ser redirecionado conforme mostrado acima. No entanto, digitar&>
é mais fácil do que qualquer um dos exemplos acima, pois envolve a digitação de menos caracteres (e é um pouco mais fácil para os seres humanos lerem). Observe que program 2> log.txt > log.txt
pode ser mais provável que funcione em shells que não sejam do bash.
PS: se você está preocupado com as pessoas que usam outras conchas, há algo que você pode adicionar à primeira linha do seu script chamada "número mágico" ou "shebang". Essa é essencialmente uma maneira de garantir que outros computadores (particularmente aqueles que executam sistemas operacionais semelhantes ao Unix) saibam qual programa usar para executar um script. Scripts diferentes usam shebangs diferentes. Um shebang para um script bash é assim:
#!/bin/bash
Se você usar o acima como a primeira linha de um determinado script, o bash geralmente será usado para executar o referido script. Isso tornará muito mais difícil para alguém executar acidentalmente o script com o shell errado.
PS: Eu não vou mentir: até agora, eu não sabia que alguém poderia usar >&
, mas, no que diz respeito ao bash, parece fazer o mesmo que &>
. Você aprende algo novo a cada dia.