Wenn ich im Hintergrund einen Befehl mit dem folgenden Befehl ausführe &
:
sleep 2 &
Wenn der Befehl beendet ist, erhalte ich "Fertig". Wie kann ich verhindern, dass die Meldung "Fertig" angezeigt wird?
Wenn ich im Hintergrund einen Befehl mit dem folgenden Befehl ausführe &
:
sleep 2 &
Wenn der Befehl beendet ist, erhalte ich "Fertig". Wie kann ich verhindern, dass die Meldung "Fertig" angezeigt wird?
Antworten:
Führen Sie die integrierte Shell aus:
$ set +m
Dies funktioniert, indem der "Monitor-Modus" deaktiviert wird, sodass die Shell nicht meldet, dass Hintergrundjobs beendet werden.
Obwohl der Befehl in einer Subshell ausgeführt wird, wie:
$ (sleep 2&)
... wird auch die Meldung deaktivieren, der einzige Grund , warum es funktioniert , ist , weil Monitormodus standardmäßig für interaktiven Shells nur aktiviert ist. Das heißt, die Subshell vermeidet die Meldung, indem sie eine zusätzliche Shell mit einem automatischen "set + m" ausführt .
Ich möchte die beiden früheren Antworten klarstellen. Wenn Sie niemals die Meldung "Fertig" von Befehlen in Ihrer Shell sehen möchten, ist dies der richtige set +m
Weg. Einfach in Ihr .profile und / oder .bashrc einfügen und fertig. Beachten Sie jedoch Folgendes, wenn Sie Folgendes eingeben:
set +m
sleep 2 &
set -m
und der Schlaf endet nach dem Finale set -m
, Sie werden immer noch die erledigte Nachricht erhalten.
Wenn Sie die Nachricht für einen einzelnen Befehlsaufruf deaktivieren möchten, ist die Subshell-Technik die richtige Wahl (sleep 2 &)
.
set +m
Ehrlich gesagt wusste ich nur Bescheid , also +1 an Wooble, um mich aufzuklären. Beachten Sie jedoch, dass die von Ihnen gewünschte Lösung von dem abhängt, was Sie versuchen.
Ohne eine Subshell können Sie Folgendes tun:
silent_background() {
{ 2>&3 "$@"& } 3>&2 2>-
disown &>/dev/null # Close STD{OUT,ERR} for silence if job has already completed
}
silent_background sleep 5
Basierend auf dieser Antwort .
jobs
wird nichts angezeigt).