Antworten:
Möchten Sie, dass es funktioniert, ohne einen zusätzlichen Befehl einzugeben, z
$ rm file
Oder nur, wenn der Benutzer so etwas eingibt
$ confirm rm file
Oder nur, wenn der Benutzer versucht, bestimmte Befehle auszuführen, z
$ rm file
aber nicht für
$ echo "Hello"
Bei Option 1 kann dies mit dem Preexec-Hook in zsh oder dem DEBUG-Trap in bash erfolgen.
Wenn Option 2, fügen Sie so etwas in eine /etc/bash.bashrc
andere Shell-Startdatei ein.
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
}
Wenn Option 3, können Sie das confirm
obige Skript ändern , oder einige Befehle haben eine Option, die Sie fragen müssen, bevor Sie etwas tun, z rm -i
. Sie könnten setzen
alias rm='rm -i'
in /etc/bash.bashrc
.
Ich habe ein bisschen mit Bash gespielt und einen Hack herausgefunden, durch den dies möglich gemacht werden könnte.
#!/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
Sie können dieses Skript beispielsweise unter confirm-any-command.sh
und source
in Ihrem speichern bashrc
. Es wird um Bestätigung jedes Befehls gebeten, den Sie ausführen möchten.
Bitte beachten Sie, dass dies nichts weiter als ein Proof-of-Concept-Hack ist. Ich bezweifle, dass es in dieser Form wirklich nützlich sein kann. Wenn Sie jeden von Ihnen eingegebenen Befehl bestätigen müssen, werden Sie sehr bald die Gewohnheit haben, nach jedem Befehl automatisch "Ja" zu drücken. Ihre mental mapping für „Ende des Befehls“ von nur ändern Enterzu Enter, yes, Enter- Sie werden es als Ganzes werden eingeben, haben nicht einmal versucht , einige Zeit zu verbringen auf Überprüfung, ob Sie wirklich diesen Befehl ausführen soll. Dies ist kontraproduktiv und hilft Ihnen nicht.
Allow? 1) yes 2) no #?
weder yes
noch no
arbeitet, was zu einer Endlosschleife führt (Debian 8)
help select
: du sollst eingeben 1
oder 2
eher als yes
oder no
. Die automatische Wiederholung für ungültige Eingaben ist beabsichtigtes Verhalten (damit die Skriptschreiberin sich nicht neu erfinden while
muss, um Prägnanz und Klarheit zu bewahren), und die EOF-Eingabe beendet die Schleife. Wenn Sie das wissen, können Sie selbst überprüfen, ob das obige Skript funktioniert. Ich werde es nicht modifizieren, da es sowieso ein grober Proof of Concept ist.
y e s Enter
Beispiel verwirrt
cd
undls
?