Il >redirector scrive l'output del comando ( stdout, non stderr- che usi 2>per quello) nel file specificato dopo di esso. Se esiste già, il file verrà sovrascritto.
Questo comportamento è utile per il primo dei tuoi comandi: se esiste un file esistente, dovrebbe essere eliminato e sostituito con quello nuovo.
Tuttavia, poiché è necessario aggiungere tutti gli altri output invece di sostituire quelli precedenti, è necessario utilizzare il redirector append >>. Questo creerà un file se non esiste ancora, ma aggiunge l'output reindirizzato al file, se esiste già.
E per favore non usare la pipe |per scrivere più comandi in una riga, che reindirizzerebbe l'output del primo comando ( stdout) all'input del secondo comando ( stdin).
Puoi usare il punto e virgola ( ;) per dire a bash di eseguire un comando dopo l'altro, come se fosse un file di script. Se un comando fallisce (il codice di ritorno non è 0), i comandi rimanenti vengono comunque eseguiti.
Oppure puoi scegliere gli operatori logici AND ( &&) o OR ( ||):
se usi &&per connettere due comandi, il secondo verrà eseguito solo se il primo ha esito positivo (il codice di ritorno è 0). Se fallisce, nessuno dei seguenti comandi verrà eseguito.
L' ||però solo corre il secondo comando se il primo non è riuscita (codice di ritorno non è 0)!
Quindi nel tuo caso ti consiglierei di usare il punto e virgola:
md5sum firefox.tar.gz > sha.txt ; sha1sum firefox.tar.gz >> sha.txt ; sha512sum firefox.tar.gz >> sha.txt
{}o()? Grazie.