Есть ли способ обеспечить последовательные задачи на терминале во время выполнения задачи (без использования файла)?
Предположим, есть 2 задачи t1, t2 который может быть выполнен последовательным способом как ниже:
t1 ; t2
# OR
t1 && t2
Теперь предположим, что я забыл бежать t2 а также t1 уже бежит; можно добавить t2 к конвейеру, чтобы он выполнялся после t1 отделки?
2 ответа
Да, ты можешь:
- Приостановите текущее задание с помощью символа приостановки, нажав Ctrl + Z.
- Тип
fgили же%добавьте то, что вы хотите в список и выполните его, например:
посколькуfg ; systemctl suspend # or % ; systemctl suspendfgвозвращает возвращаемое значение работы, которую оно возобновило, список операторов, таких как&&а также||работать как положено:fg && echo "Finished successfully!" # or % && echo "Finished successfully!"
man bash / JOB CONTROL говорит о приостановленном персонаже:
Ввод символа приостановки (обычно
^Z, Control - Z) во время выполнения процесса останавливает этот процесс и возвращает управлениеbash, (…) Пользователь может затем манипулировать состоянием этого задания, используяbgкоманда, чтобы продолжить это в фоновом режиме,fgкоманда, чтобы продолжить это на переднем плане, илиkillприказ убить его.^Zвступает в силу немедленно и имеет дополнительный побочный эффект, приводящий к тому, что ожидаемые выходные данные и вводимые данные сбрасываются.
fg объясняется в man bash /SHELL ВСТРОЕННЫЕ КОМАНДЫ:
fg [ jobspec ]
Возобновите задание заданий на переднем плане и сделайте его текущим заданием. Если jobspec отсутствует, используется оболочка для текущего задания. Возвращаемое значение - это значение команды, помещенной на передний план, или сбой, если он запускается, когда управление заданиями отключено, или, если он запускается с включенным управлением заданиями, если задание не указывает допустимое задание или задание задания указывает задание, которое было запущено без управления заданием,
Дальнейшее чтение (кроме man bash) по контролю за работой:
Я видел этот метод здесь: https://superuser.com/questions/334272/how-to-run-a-command-after-an-already-running-existing-one-finishes
где вы сначала делаете Ctrl+z, чтобы остановить (приостановить) запущенную, а затем запускаете пропущенную команду следующим образом: fg && ./missed_cmd.sh и он запустится, как только fg отделки.
fg (команда переднего плана) переведет приостановленную работу в Интернет и && будет гарантировать, что пропущенная команда будет выполнена только в случае успешного выполнения первой команды.