Réponses:
Voulez-vous que cela fonctionne sans taper une commande supplémentaire, par exemple
$ rm file
Ou seulement lorsque l'utilisateur tape quelque chose comme
$ confirm rm file
Ou seulement lorsque l'utilisateur essaie d'exécuter certaines commandes, par exemple
$ rm file
mais pas pour
$ echo "Hello"
Si l'option 1, cela peut être fait en utilisant le hook preexec dans zsh, ou le trap DEBUG dans bash.
Si l'option 2, mettez quelque chose comme ça dans /etc/bash.bashrc
ou un autre fichier de démarrage du shell.
confirm() {
echo -n "Do you want to run $*? [N/y] "
read -N 1 REPLY
echo
if test "$REPLY" = "y" -o "$REPLY" = "Y"; then
"$@"
else
echo "Cancelled by user"
fi
}
Si l'option 3, vous pouvez modifier le confirm
script ci-dessus, ou, certaines commandes ont une option à demander avant de faire quelque chose, par exemple rm -i
. Vous pouvez mettre
alias rm='rm -i'
en /etc/bash.bashrc
.
J'ai un peu joué avec bash et trouvé un hack par lequel cela pourrait être rendu possible.
#!/bin/bash
debug_trap () {
echo "executing $BASH_COMMAND"
echo "Allow?"
select choice in yes no
do
if [ "$choice" = "yes" ]
then break
elif [ "$choice" = "no" ]
then return 1
fi
done
}
shopt -s extdebug
trap debug_trap DEBUG
Vous pouvez enregistrer ce script sous, disons, confirm-any-command.sh
et source
dans votre fichier bashrc
. Il vous demandera de confirmer chaque commande que vous tenterez d'exécuter.
Veuillez noter que ce n'est rien de plus qu'un hack de preuve de concept; Je doute que cela puisse vraiment être utile sous cette forme. Si vous devez confirmer chaque commande que vous tapez, vous allez très vite prendre l'habitude de cliquer automatiquement sur "oui" après chaque commande. Votre cartographie mentale pour « fin de la commande » passera de juste Enterà Enter, yes, Enter- vous serez en train de taper dans son ensemble, ne même pas essayer de passer un peu de temps à vérifier que vous vraiment voulez que cette commande à exécuter. C'est contre-productif et ne vous aidera pas.
Allow? 1) yes 2) no #?
ni yes
ni no
travail entraînant boucle infinie (Debian 8)
help select
: vous êtes censé entrer 1
ou 2
plutôt que yes
ou no
. La nouvelle tentative automatique pour les entrées non valides est un comportement voulu (de sorte que le scripteur n'a pas à se réinventer while
, en conservant la concision et la clarté), et l'entrée EOF termine la boucle. Sachant cela, vous pouvez vérifier vous-même que le script ci-dessus fonctionne. Je ne vais pas le modifier, car c'est une preuve de concept grossière de toute façon.
y e s Enter
exemple
cd
etls
?