Quando cd fallisce, rm non perdona
Commento su un blog, in risposta a una discussione su script schedulati e cattive pratiche in shell scripting.
Ho visto di peggio (ma non sono stato io!), ad esempio il seguente task schedulato - semplifico un po':
cd /var/programma/temp
rm -rf *
Nessun errore, tutto corretto no? Tutto funziona alla perfezione per diverso tempo.
Sennonché un giorno il disco dove si trova la cartella temp va in fault, ma niente di grave: alla fine è solo una cartella temp...
...poi però parte il task schedulato, il comando cd va in errore ma lo script non intercetta l'errore e continua...
Nota tecnica: il rm -rf * viene eseguito nella directory corrente.
In cron, la directory corrente è la home dell'utente (o / se lo
script gira come root). Il risultato è che lo script cancella tutto
quello che trova lì, non quello che credeva di cancellare.
Due caratteri fanno la differenza:
cd /var/programma/temp && rm -rf *
L'operatore && esegue il secondo comando solo se il primo è
andato a buon fine. Se cd fallisce, rm non viene eseguito.