Non c'è modo per un sistema totalmente a prova di proiettile. E aggiungendo "Sei sicuro?" suggerimenti alle cose è controproducente e porta a "Certo che ne sono sicuro". reazioni istintive.
Un trucco che ho imparato da un libro negli anni passati è fare prima ls -R blah* quindi, esegui rm -fr blah* se e solo se l'elenco che è apparso ha colpito quello che volevo colpire.
È abbastanza facile eseguire il ls comando prima, poi ↑ , elimina il ls -R e sostituisci con rm -fr .
L'ultima domanda è:"Se l'informazione è stata preziosa per te, dov'è il tuo backup?"
Un DEBUG trap potrebbe essere scritto per annullare i comandi che sembrano sospetti. Il codice seguente, o un codice simile, può essere aggiunto al tuo ~/.bashrc :
shopt -s extdebug
checkcommand() {
if [[ $BASH_COMMAND = 'rm -r'*' *' ]]; then
echo "Suppressing rm -r command ending in a wildcard" >&2
return 1
fi
# check for other commands here, if you like
return 0
}
trap checkcommand DEBUG
Regola la logica a piacere.
(In realtà non mi aspetto che questo approccio sia utile -- troppi modi per rovinare un comando in modo distruttivo per trovarli testati uno per uno -- ma fornisce una risposta letterale alla domanda).
Puoi allenarti a usare, ad esempio, rmrf al posto di rm -rf ?
In tal caso, questa funzione bash ti darà la possibilità di vedere cosa accadrebbe effettivamente prima di confermare il comando:
rmrf() { echo rm -rf "example@unixlinux.online"; read -p "Proceed (y/N)? "; [ "${REPLY,,}" = y ] && rm -rf "example@unixlinux.online"; }
Per rendere permanente questa funzione, aggiungi questa riga al ~/.bashrc file su ogni computer che utilizzi.
Confronto con il comune rm pseudonimo
È comune definire un alias:
alias rm='rm -i'
Questo ha due limitazioni:
-
Se arrivi a dipendere da questo alias, subirai uno shock quando ti trovi su una macchina o in un ambiente che non lo possiede. Al contrario, provando a eseguire
rmrfsu una macchina senza quella funzione restituirà un innocuocommand not found. -
Questo alias non è di aiuto nel tuo caso perché
-fl'opzione fornita sulla riga di comando sovrascrive-iopzione nell'alias.