Przekierowanie danych wyjściowych polecenia wydaje się być nieistotne, ponieważ powiadomienie jest wysyłane przez powłokę, gdy zadanie jest uruchamiane asynchronicznie. Mówiąc dokładniej, jest to funkcja powłoki (funkcja) związana z kontrolą zadań .
Tutaj cytat z „Bash Reference Manual”, rozdział „Job Job”, rozdział pierwszy.
Powłoka wiąże zadanie z każdym potokiem. Przechowuje tabelę aktualnie wykonywanych zadań, która może być wymieniona w jobs
poleceniu. Gdy Bash uruchamia zadanie asynchronicznie, drukuje linię, która wygląda następująco:
[1] 25647
wskazując, że to zadanie jest zadaniem nr 1 i że identyfikator procesu ostatniego procesu w potoku powiązanym z tym zadaniem to 25647. Wszystkie procesy w jednym potoku są członkami tego samego zadania. Bash używa abstrakcji JOB jako podstawy kontroli zadań.
Zauważ, że skrypt powłoki nie wyświetla tego powiadomienia.
$ cat test
#!/bin/bash
true & echo true
$ ./test
true
W rzeczywistości
Zsh
Dokumentacja Zsh zawiera podobne informacje na temat tych powiadomień, patrz man 1 zshmisc
sekcja „ZADANIA”. Te powiadomienia nie są wyświetlane, gdy kontrola zadań jest wyłączona.
MONITOR ( -m , ksh: -m )
Zezwalaj na kontrolę zadań. Ustawiony domyślnie w interaktywnej powłoce.
zsh_prompt % setopt no_monitor
zsh_prompt % true & echo true
true
zsh_prompt %
zsh_prompt %
Grzmotnąć
Wygląda na to, że Bash zawsze wyświetla np [1] 25647
. „Ostateczne powiadomienie” np. [1]+ Done true
Nie jest wyświetlane, gdy kontrola zadań jest wyłączona.
bash_prompt $ true & echo true
[1] 25647
true
bash_prompt $
[1]+ Done true
Kontrola zadań wyłączona
bash_prompt $ set +m # disable job control
bash_prompt $ true & echo true
[1] 25685
bash_prompt $
bash_prompt $
Wniosek
Nie wiem, czy wyłączenie kontroli zadań w celu ukrycia powiadomień jest dobrą rzeczą?
Zasoby