У мене є скрипт оболонки script.shз командою, cmdзапущеною у фоновому режимі, тобто:
#!/bin/bash
…
cmd &
…
Якщо я відкрию емулятор терміналу (я спробував xfce4-terminal та gnome-terminal) і запускаю script.shвсередині, моя команда cmdефективно виконується та виконується у фоновому режимі, як очікувалося.
Але якщо я відкрию емулятор терміналу з попереднього (або на початку мого сеансу на робочому столі, що є моїм реальним випадком використання), і виконую свій сценарій
xfce4-terminal -H -x script.sh (or gnome-terminal -x script.sh)
команда cmdбільше не виконується.
Я виявив, що я можу змусити його виконати, ввівши set -mсвій сценарій, але я не розумію, чому це потрібно (а не достатньо насправді) у цьому випадку, а не в попередньому. Дійсно, якщо я поміщаю set -oв свій сценарій, я отримую однаковий результат в обох випадках.
Чи може хтось мені це пояснити та / або підказати правильний спосіб продовження фонових завдань у скриптах оболонки? Дякую!
EDIT: Насправді, cmdвиконується в обох випадках, але у другому він негайно вбивається після закінчення script.sh. Щоб цього не допустити, можна скористатися nohup, але цього недостатньо, і для мене це найдивніше: треба також поставити sleep 1або щось подібне, щоб дозволити належним чином запустити процес у фоновому режимі та відмежуватися від батьківської оболонки, інакше його також вбивають.
Я дійсно не розумію цієї різниці в поведінці між обома оболонками, оскільки обидві не інтерактивні, як сказано в попередньому коментарі.
cmdте, що можна побачити в диспетчері завдань, як, наприклад, sleep nз nдосить великим. Але можна вибрати щось із графічним інтерфейсом, як- firefoxнебудь або щось інше.
cmd, що не виконуєте? Це легко і унікально знайти у виводі PS (і триває достатньо довго, щоб знайти), або він видає звук або іншу індикацію GUI?