Die Umleitung der Befehlsausgabe scheint irrelevant zu sein, da die Benachrichtigung von der Shell gesendet wird, wenn a Job asynchron gestartet wird. Genauer gesagt handelt es sich um eine Shell-Funktion (Funktion), die sich auf die Jobsteuerung bezieht .
Hier ein Zitat aus dem "Bash Reference Manual", Kapitel "Job Control", Abschnitt eins.
Die Shell ordnet jeder Pipeline einen Job zu. Es enthält eine Tabelle der aktuell ausgeführten Jobs, die mit dem jobs
Befehl aufgelistet werden können . Wenn Bash einen Job asynchron startet, wird eine Zeile gedruckt, die wie folgt aussieht:
[1] 25647
Dies zeigt an, dass dieser Job Jobnummer 1 ist und dass die Prozess-ID des letzten Prozesses in der Pipeline, der diesem Job zugeordnet ist, 25647 lautet. Alle Prozesse in einer einzelnen Pipeline sind Mitglieder desselben Jobs. Bash verwendet die JOB-Abstraktion als Grundlage für die Jobsteuerung.
Beachten Sie, dass ein Shell-Skript diese Benachrichtigung nicht anzeigt.
$ cat test
#!/bin/bash
true & echo true
$ ./test
true
Eigentlich
Zsh
Die Zsh-Dokumentation enthält ähnliche Hinweise zu diesen Benachrichtigungen, siehe man 1 zshmisc
Abschnitt "JOBS". Diese Benachrichtigungen werden nicht angezeigt, wenn die Jobsteuerung deaktiviert ist.
MONITOR ( -m , ksh: -m )
Jobsteuerung zulassen. Standardmäßig in der interaktiven Shell festgelegt.
zsh_prompt % setopt no_monitor
zsh_prompt % true & echo true
true
zsh_prompt %
zsh_prompt %
Bash
Es scheint, dass Bash immer zB anzeigt [1] 25647
. Die "Endbenachrichtigung" wird zB [1]+ Done true
nicht angezeigt, wenn die Jobsteuerung deaktiviert ist.
bash_prompt $ true & echo true
[1] 25647
true
bash_prompt $
[1]+ Done true
Jobsteuerung deaktiviert
bash_prompt $ set +m # disable job control
bash_prompt $ true & echo true
[1] 25685
bash_prompt $
bash_prompt $
Fazit
Ich weiß nicht, ob es gut ist, die Jobsteuerung zu deaktivieren , um die Benachrichtigungen auszublenden.
Ressourcen