O redirecionador >
grava a saída do comando ( stdout
, não stderr
- você usa 2>
para isso) no arquivo especificado após ele. Se já existir, o arquivo será sobrescrito.
Esse comportamento é útil para o primeiro dos seus comandos: se houver um arquivo existente, ele deverá ser excluído e substituído pelo novo.
No entanto, como você precisa anexar todas as saídas adicionais em vez de substituir as anteriores, é necessário usar o redirecionador de acréscimo >>
. Isso criará um arquivo se ele ainda não existir, mas anexará a saída redirecionada ao arquivo, se já existir.
E, por favor, não use o pipe |
para escrever vários comandos em uma linha, o que redirecionaria a saída do primeiro comando ( stdout
) para a entrada do segundo comando ( stdin
).
Você pode usar o ponto-e-vírgula ( ;
) para apenas informar o bash para executar um comando após o outro, como se fosse um arquivo de script. Se um comando falhar (o código de retorno não é 0), os comandos restantes ainda serão executados.
Ou você pode escolher os operadores lógicos AND ( &&
) ou OR ( ||
):
Se você usar &&
para conectar dois comandos, o segundo será somente executado, se o primeiro for bem-sucedido (código de retorno é 0). Se falhar, nenhum dos seguintes comandos será executado.
O ||
, no entanto, somente executa o segundo comando se o primeiro falhar (o código de retorno não é 0)!
Então, no seu caso, eu recomendo que você use o ponto-e-vírgula:
md5sum firefox.tar.gz > sha.txt ; sha1sum firefox.tar.gz >> sha.txt ; sha512sum firefox.tar.gz >> sha.txt