Typisches Szenario:
Ich muss vorübergehend auf eine Datei zugreifen, auf die mein virtueller Host keinen Zugriff erlaubt. Ich starte Vim, bearbeite die Einstellungen und weise Apache im Hintergrund an, seine Konfiguration neu zu laden.
Problem:
Wenn ich das jetzt vergesse, wird mir meine Shell sagen, dass „Jobs gestoppt wurden“, wenn ich die Sitzung mit STRG+D betätige. Da ich jedoch aufgrund von SSH, Tmux und Ähnlichem die Angewohnheit habe, Shells in Shells in Shells zu haben, sende ich auch häufig wiederholt EOF, wenn ich meine Arbeit beende und meine Fenster schließe. Dies wiederum führt dazu, dass ich die Shell trotz der Warnung versehentlich beende.
Kann ich das Töten solcher Granaten erschweren?
Antwort1
Wenn Sie verwenden bash
, können Sie die IGNOREEOF
Shell-Variable auf eine Zahl setzen, die angibt, wie viele aufeinanderfolgende EOF-Zeichen die Shell ignorieren soll, bevor das EOF als Beendigungssignal behandelt wird. Weitere Einzelheiten finden Sie auf der Manpage.
Dies wird jedoch ausgelöst, bevor die Meldung „Es gibt angehaltene Jobs“ ausgelöst wird, sodass Sie immer noch das gleiche Problem haben – Sie erhalten diese Meldung und ein weiteres ^D beendet die Shell.
Alternativ können Sie die Anzahl der Shell-Jobs in Ihre Eingabeaufforderung eingeben, wenn diese Zahl größer als Null ist.
Zum Beispiel ein Auszug aus meiner .bashrc:
PROMPT_COMMAND=prompt_command
prompt_command() {
job_count=$(jobs | wc -l)
if [ $job_count -gt 0 ] ; then
prompt_job="[$job_count] "
else
prompt_job=""
fi
}
PS1="...\${prompt_job}..."
Danach kann die Schale so aussehen...[1] ...
Dadurch wird in Ihrer Eingabeaufforderung eine Jobanzahl angezeigt, wenn diese größer als Null ist. So können Sie leicht erkennen, wenn Sie unvollständige Jobs haben, und es funktioniert (für mich) gut als visuelle Erinnerung daran, dass Jobs noch ausgeführt werden.
Antwort2
Basierend auf der vorherigen Antwort bin ich zu folgendem Ergebnis gekommen
PROMPT_COMMAND=protect_bg_jobs
protect_bg_jobs()
{
if [ "$(jobs)" == "" ]; then
set +o ignoreeof
else
set -o ignoreeof
fi
}
Dadurch wird die Meldung „Es sind Jobs zum Stoppen vorhanden“ ausgeblendet, aber meine Vim-Puffer werden gespeichert.