O >redirecionador grava a saída do comando ( stdoutnão stderr- você usa 2>para isso) no arquivo especificado depois dele. Se já existir, o arquivo será substituído.
Esse comportamento é útil para o primeiro de 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 anexação >>. Isso criará um arquivo se ele ainda não existir, mas anexará a saída redirecionada ao arquivo, se ele já existir.
E não use o canal |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 dizer ao 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 &¶ conectar dois comandos, o segundo só será executado, se o primeiro for bem-sucedido (o código de retorno é 0). Se falhar, nenhum dos seguintes comandos será executado.
O ||entretanto única corre o segundo comando se o primeiro falhou (código de retorno não é 0)!
Portanto, 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
{}ou()? Obrigado.