Od man nohup:
Jeśli standardowym wejściem jest terminal, przekieruj go z / dev / null. Jeśli standardowym wyjściem jest terminal, dołącz wyjście, nohup.out jeśli to możliwe, w $HOME/nohup.outprzeciwnym razie. Jeśli błąd standardowy to terminal, przekieruj go na standardowe wyjście. Aby zapisać dane wyjściowe w PLIKU, użyj nohup COMMAND > FILE.
(całkowicie zmieniony na podstawie komentarzy)
Podczas wychodzenia z powłoki lub zamykania terminala procesy potomne będą wysyłane SIGHUP (zawieszenie, nazwa pochodzi od momentu, w którym terminale wybiorą numer do komputera z systemem UNIX), aby poinformować ich, że terminal nie jest już podłączony. Ponadto po zakończeniu procesu powłoki strumienie stdin, stdout i stderr procesu potomnego zostaną zamknięte. Zwykle powoduje to śmierć procesu potomnego. Zwykle jest to dobra rzecz, ponieważ pozwala uniknąć uruchamiania procesów bez użytkownika.
Celem tego nohupprogramu jest utrzymanie procesu nawet po zakończeniu powłoki i odłączeniu terminala. Jako takie, kierowanie jego wyjścia do terminala całkowicie niweczy cel. Moja pierwotna odpowiedź ( nohup COMMAND | cat) nie była pomocna, ponieważ: kiedy terminal jest zamknięty, wyjście kota jest zamknięte, więc kot umiera, co łamie rurę i wysyła SIGPIPE do procesu nohup, powodując jego śmierć. Odpowiedziałem na to pytanie, nie myśląc o celu.
Aby osiągnąć swój cel, uruchom, nohup COMMAND > FILEaby wybrać nazwę pliku, do którego chcesz skierować dane wyjściowe. Następnie użyj, tail -f FILEaby obejrzeć wyjście na terminalu.
Podobnie można użyć następującej konstrukcji powłoki: COMMAND >FILE 2>&1 </dev/null &aby uruchomić polecenie, którego strumienie stdio nie są podłączone do terminala i mogą kontynuować działanie po zamknięciu terminala. Dodatkowo w zsh uruchom wbudowaną powłokę, disownaby powiedzieć zsh, aby opuścił proces zamiast zabijać go po zakończeniu powłoki.