Il n'y a aucun moyen d'avoir un système totalement à l'épreuve des balles. Et en ajoutant "Êtes-vous sûr ?" les invites aux choses sont à la fois contre-productives et conduisent à "Bien sûr que je suis sûr." réactions instinctives.
Une astuce que j'ai trouvée dans un livre ces dernières années est de faire d'abord ls -R blah*
puis, faites rm -fr blah*
si et seulement si la liste qui s'affiche correspond à ce que je voulais.
C'est assez facile de faire le ls
commande d'abord, puis ↑ , supprimez le ls -R
et remplacer par rm -fr
.
La dernière question est :"Si l'information était précieuse pour vous, où est votre sauvegarde ?"
Un DEBUG
trap pourrait être écrit pour annuler les commandes qui semblent suspectes. Le code suivant, ou un code similaire, peut être ajouté à votre ~/.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
Ajustez la logique au goût.
(Je ne m'attends pas vraiment à ce que cette approche soit utile - trop de façons de gâcher une commande de manière destructive pour les trouver testant une par une - mais elle fournit une réponse littérale à la question).
Pouvez-vous vous entraîner à utiliser, disons, rmrf
à la place de rm -rf
?
Si tel est le cas, cette fonction bash vous permettra de voir ce qui se passerait réellement avant de confirmer la commande :
rmrf() { echo rm -rf "[email protected]"; read -p "Proceed (y/N)? "; [ "${REPLY,,}" = y ] && rm -rf "[email protected]"; }
Pour rendre cette fonction permanente, ajoutez cette ligne au ~/.bashrc
fichier sur chaque ordinateur que vous utilisez.
Comparaison avec le rm
commun alias
Il est courant de définir un alias :
alias rm='rm -i'
Cela a deux limites :
-
Si vous finissez par dépendre de cet alias, vous serez choqué lorsque vous serez sur une machine ou dans un environnement qui ne l'a pas. En revanche, essayer d'exécuter
rmrf
sur une machine sans cette fonction renverra uncommand not found
inoffensif . -
Cet alias n'est d'aucune aide dans votre cas car le
-f
l'option que vous fournissez sur la ligne de commande remplace le-i
option dans l'alias.