Припустимо, є 2 завдання t1
, t2
які можна виконати послідовно, як показано нижче:
t1 ; t2
# OR
t1 && t2
Тепер припустимо, я забув бігати t2
і t1
вже бігає; чи можу я додати t2
до конвеєра так, щоб він виконувався після t1
закінчення?
Припустимо, є 2 завдання t1
, t2
які можна виконати послідовно, як показано нижче:
t1 ; t2
# OR
t1 && t2
Тепер припустимо, я забув бігати t2
і t1
вже бігає; чи можу я додати t2
до конвеєра так, щоб він виконувався після t1
закінчення?
Відповіді:
Так, ти можеш:
fg
або %
додайте до списку те, що ви хочете, та виконайте його, наприклад:
fg ; systemctl suspend # or
% ; systemctl suspend
Оскільки fg
повертається повернене значення роботи, яке воно відновилося, оператори списку подобаються &&
та ||
працюють як слід:
fg && echo "Finished successfully!" # or
% && echo "Finished successfully!"
man bash
/ JOB CONTROL говорить про призупинення характеру:
Введення символу призупинення (як правило
^Z
, Control- Z) під час запуску процесу зупиняє цей процес і повертає контроль доbash
. (…) Користувач може потім маніпулювати станом цього завдання, використовуючиbg
команду для продовження його у фоновому режимі,fg
команду продовжувати його на передньому плані абоkill
команду його вбити. A^Z
набирає чинності негайно і має додатковий побічний ефект, що спричиняє відмову від очікування виводу та набрання голови.
fg
пояснюється в man bash
/ SHELL BUILTIN COMMANDS :
фг [ jobspec ]
Резюме jobspec на передньому плані, і зробити його поточне завдання. Якщо jobspec відсутня, використовується поняття оболонки поточного завдання. Зворотне значення - це команда, розміщена на передньому плані, або відмова, якщо запустити, коли контроль роботи відключений, або, якщо запускається з увімкненим контролем роботи, якщо jobspec не вказує дійсне завдання або taskpec вказує завдання, яке було розпочато без контролю роботи .
Подальше читання (окрім man bash
) щодо контролю за роботою:
^Z^Z
і %-;%+;t3
досить добре в деяких випадках, але це далеко не справжнє рішення проблеми.
Я бачив цей метод тут: /superuser/334272/how-to-run-a-command-after-an-already-running-existing-one-finishes
де ви спочатку зробите Ctrl+, zщоб зупинити (призупинити) запущену, потім ви запустили пропущену команду так: fg && ./missed_cmd.sh
і вона запуститься, як тільки fg
закінчиться.
Команда fg
(передній план) принесе призупинене завдання в Інтернеті, і &&
буде забезпечити виконання пропущеної команди лише в тому випадку, коли перша команда буде успішною.
t3
вt1; t2; t3
абоt1 && t2 && t3
.