Припустимо, є 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.