Есть ли способ обеспечить последовательные задачи на терминале во время выполнения задачи (без использования файла)?

Предположим, есть 2 задачи t1, t2 который может быть выполнен последовательным способом как ниже:

t1 ; t2
# OR
t1 && t2

Теперь предположим, что я забыл бежать t2 а также t1 уже бежит; можно добавить t2 к конвейеру, чтобы он выполнялся после t1 отделки?

2 ответа

Да, ты можешь:

  1. Приостановите текущее задание с помощью символа приостановки, нажав Ctrl + Z.
  2. Тип 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 приказ убить его. ^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 (команда переднего плана) переведет приостановленную работу в Интернет и && будет гарантировать, что пропущенная команда будет выполнена только в случае успешного выполнения первой команды.

Другие вопросы по тегам