Je veux mettre un rapide "êtes-vous sûr?" demande de confirmation au sommet d'une potentiellement dangereux script bash, ce qui est la méthode la plus simple/la meilleure façon de le faire?
Réponses
Trop de publicités?read -p "Are you sure? " -n 1 -r
echo # (optional) move to a new line
if [[ $REPLY =~ ^[Yy]$ ]]
then
# do dangerous stuff
fi
Edit:
J'ai incorporé levislevis85la suggestion (merci!) et a ajouté que l' -n
option d' read
d'accepter un caractère sans avoir besoin d'appuyer sur Entrer. Vous pouvez utiliser l'un ou les deux de ces.
Aussi, la annulés forme pourrait ressembler à ceci:
read -p "Are you sure? " -n 1 -r
echo # (optional) move to a new line
if [[ ! $REPLY =~ ^[Yy]$ ]]
then
exit 1
fi
Cependant, comme souligné par Erich, dans certaines circonstances, comme une erreur de syntaxe causés par le script en cours d'exécution dans le mauvais shell, la annulés forme pourrait permettre la poursuite du script pour les "trucs dangereux". Le mode de défaillance doit favoriser le plus sûr des résultats ainsi seul le premier, non annulés if
doit être utilisé.
Voici la fonction que j'utilise :
function ask_yes_or_no() {
read -p "$1 ([y]es or [N]o): "
case $(echo $REPLY | tr '[A-Z]' '[a-z]') in
y|yes) echo "yes" ;;
*) echo "no" ;;
esac
}
Et un exemple de son utilisation:
if [[ "no" == $(ask_yes_or_no "Are you sure?") || \
"no" == $(ask_yes_or_no "Are you *really* sure?") ]]
then
echo "Skipped."
exit 0
fi
# Do something really dangerous...
- La sortie est toujours "oui" ou "non"
- C'est "non" par défaut
- Tout sauf "y" ou "oui" retourne "non", il est assez sûr pour un dangereux script bash
- Et il est insensible à la casse, "Y", "Oui" ou "OUI" travailler en tant que "oui".
J'espère que vous l'aimez,
Cheers!