
Ich versuche, jedes Mal eine Bestätigungsmeldung zu erhalten, wenn ich exit
einen Befehl in die Eingabeaufforderung eingebe. Dazu habe ich versucht, trap
in der .bashrc
Datei zu verwenden, aber es scheint, als wäre Trap keine Lösung, da es den ursprünglichen Befehl trotzdem ausführt. Gibt es eine Möglichkeit, dies zu erreichen?
Hier ist mein Bashrc-Skriptcode, der die Aufgabe nicht erledigen konnte:
function _exit() # Function to run upon exit of shell.
{
read -p "${RED}Are you sure? " REPLY
if [[ $REPLY =~ ^[Yy]$ ]]; then
echo -e "${RED}Bye${NC}"
exit 0
else
#I do not know what to do here to not exit
return
fi
}
trap _exit EXIT
Antwort1
Wenn die Shell zsh
oder ist bash
(aber nicht im sh
Modus), erstellen Sie exit
eine Funktion. Funktionen haben Vorrang vor Shell-Builtins (auch speziellen wie exit
) in zsh
oder bash
(aber nicht in POSIX-Shells). Benennen Sie Ihre Funktion also einfach in um exit
und verwenden Sie sie command exit
stattdessen innerhalb der Funktion. Andernfalls hätten Sie natürlich eine endlose Rekursion.
Antwort2
Die Überlastungsfunktion exit()
passt nicht in dieses ^D
Szenario. Reden wir also darüber trap
.
Ihre else
Klausel sollte einige Dinge enthalten, die entweder Bash zurückhalten oder das Exit-Signal ignorieren können. Ich weiß auch nicht, wie das geht.
Aber ich denke, Sie können vorerst alternativ Bash erneut öffnen.
Wenn Sie Ihre else
Klausel durch Folgendes ersetzen:
echo
history -a
bash
Und wenn Sie dann den Ausgang in der Eingabeaufforderung abbrechen, wird eine neue Bash erneut geöffnet und es sieht fast so aus, als wäre nichts passiert, genau wie in der alten.
Dieser Ansatz hat einen Fehler: Sie verlieren die Variablenzuweisungen, die Sie zuvor eingegeben haben. Vielleicht können wir daran arbeiten. Aber wenn Sie damit kein Problem haben, ist das das Problem.
Sie können diesen Code trotzdem Ihren Bedürfnissen entsprechend ändern.