Від man nohup:
Якщо стандартним входом є термінал, перенаправляйте його з / dev / null. Якщо стандартний вихід є терміналом, додайте вихід, nohup.out якщо можливо, $HOME/nohup.outінакше. Якщо стандартна помилка є терміналом, перенаправляйте її на стандартний вихід. Щоб зберегти вихід у FILE, використовуйте nohup COMMAND > FILE.
(повністю переглянуто на основі коментарів)
Під час виходу з оболонки або закриття терміналу дочірні процеси будуть надіслані SIGHUP (повісити, назва походить з часу, коли термінали набиратимуться на комп'ютер UNIX), щоб повідомити їм, що термінал не довше з'єднані. Крім того, коли процес оболонки закінчиться, потоки stdin, stdout та stderr процесу дочірнього процесу будуть закриті. Зазвичай це призводить до загибелі процесу дитини. Зазвичай це хороша річ, оскільки це дозволяє уникати процесів, що працюють без користувача.
Мета nohupпрограми - підтримувати процес навіть після закінчення оболонки та відключення терміналу. Таким чином, спрямування його виходу на термінал повністю перемагає мету. Моя оригінальна відповідь ( nohup COMMAND | cat) не була корисною, тому що: коли закритий термінал, вихід кішки закривається, і тому кішка гине, яка розриває трубу і відправляє SIGPIPE до процесу nohup, приводячи її до загибелі. Я відповів на питання, не думаючи про мету.
Щоб досягти своєї мети, запустіть nohup COMMAND > FILEдля вибору імені файлу, на який слід направити вихід. Потім використовуйте tail -f FILEдля перегляду виходу на терміналі.
Аналогічно можна використовувати таку конструкцію оболонки: COMMAND >FILE 2>&1 </dev/null &запустити команду, потоки stdio якої не підключені до терміналу і можуть продовжувати працювати після закриття терміналу. Крім того, в zsh запустіть вбудований оболонку, disownщоб сказати zsh залишати процес, а не вбивати його, коли оболонка закінчується.