Respuestas:
¿Desea que funcione sin escribir un comando adicional, por ejemplo,
$ rm file
O solo cuando el usuario escribe algo como
$ confirm rm file
O solo cuando el usuario intenta ejecutar ciertos comandos, p. Ej.
$ rm file
pero no para
$ echo "Hello"
Si la opción 1, eso se puede hacer usando el enlace preexec en zsh, o la trampa DEBUG en bash.
Si es la opción 2, coloque algo como esto en /etc/bash.bashrcotro archivo de inicio de 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 la opción 3, se puede modificar el confirmscript de arriba, o, algunos comandos tienen la opción de pedir antes de hacer algo, por ejemplo rm -i. Se puede poner
alias rm='rm -i'en /etc/bash.bashrc.
He jugado un poco con bash y descubrí un truco por el cual esto podría ser posible.
#!/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
Puede guardar este script en, digamos, confirm-any-command.shy sourceen su bashrc. Le pedirá confirmación de cada comando que intentará ejecutar.
Tenga en cuenta que esto no es más que un truco de prueba de concepto; Dudo que realmente pueda ser útil de esta forma. Si tiene que confirmar todos y cada uno de los comandos que escribe, muy pronto adquirirá el hábito de presionar automáticamente "sí" después de cada comando. Su mapeo mental "fin de comando" cambiará de simplemente Entera Enter, yes, Enter- se le escribiéndolo en su conjunto, ni siquiera tratar de pasar algún tiempo en verificar que realmente quiere este comando a ejecutar. Esto es contraproducente y no te ayudará.
Allow? 1) yes 2) no #? ninguno yes, ni noel trabajo que causa bucle infinito (Debian 8)
help select: se supone que debes ingresar 1o en 2lugar de yeso no. El reintento automático para entradas no válidas es el comportamiento previsto (para que el escritor de guiones no tenga que reinventarse a whilesí misma, conservando la concisión y la claridad), y la entrada EOF termina el ciclo. Sabiendo eso, puedes comprobar que el script anterior funciona. No lo modificaré, ya que de todos modos es una cruda prueba de concepto.
y e s Enterejemplo me confundió
cdyls?