Kann ich das Beenden der Meldung „Es gibt angehaltene Jobs“ schwieriger machen?

Kann ich das Beenden der Meldung „Es gibt angehaltene Jobs“ schwieriger machen?

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 IGNOREEOFShell-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.

verwandte Informationen