Il reindirizzamento dell'output del comando sembra essere irrilevante perché la notifica viene inviata dalla shell quando un lavoro viene avviato in modo asincrono. Più precisamente, si tratta di una funzione shell (funzionalità) relativa al controllo del lavoro .
Qui, una citazione che viene dal "Manuale di riferimento di Bash", capitolo "Controllo dei lavori", sezione uno.
La shell associa un LAVORO a ciascuna pipeline. Mantiene una tabella dei lavori attualmente in esecuzione, che può essere elencata con il jobs
comando. Quando Bash avvia un lavoro in modo asincrono, stampa una riga che assomiglia a:
[1] 25647
che indica che questo lavoro è il numero lavoro 1 e che l'ID processo dell'ultimo processo nella pipeline associato a questo lavoro è 25647. Tutti i processi in una singola pipeline sono membri dello stesso lavoro. Bash utilizza l'astrazione JOB come base per il controllo del lavoro.
Si noti che uno script di shell non visualizza questa notifica.
$ cat test
#!/bin/bash
true & echo true
$ ./test
true
Nei fatti
zsh
La documentazione di Zsh fornisce indicazioni simili su queste notifiche, vedere la man 1 zshmisc
sezione "LAVORI". Queste notifiche non vengono visualizzate quando il controllo lavoro è disabilitato.
MONITOR ( -m , ksh: -m )
Consenti controllo del lavoro. Impostato di default nella shell interattiva.
zsh_prompt % setopt no_monitor
zsh_prompt % true & echo true
true
zsh_prompt %
zsh_prompt %
bash
Sembra che Bash visualizzi sempre ad es [1] 25647
. La "notifica finale" ad es. [1]+ Done true
Non viene visualizzata quando il controllo lavori è disabilitato.
bash_prompt $ true & echo true
[1] 25647
true
bash_prompt $
[1]+ Done true
Controllo lavoro disabilitato
bash_prompt $ set +m # disable job control
bash_prompt $ true & echo true
[1] 25685
bash_prompt $
bash_prompt $
Conclusione
Non so se disabilitare il controllo dei lavori per nascondere le notifiche sia una buona cosa?
risorse