Вопрос или проблема
Когда я выполняю ресурсоемкие процессы в терминале, я люблю добавлять что-то вроде say "done"
в качестве дополнительной команды, чтобы меня уведомляли, когда текущий процесс завершится. Например:
$ do_this_long_thing; say "done";
Отлично работает. Но иногда я забываю команду say "done"
и осознаю это только тогда, когда длинная команда уже выполняется. Можно ли добавить эту дополнительную команду в очередь, когда команда уже выполняется?
Мое решение такое: приостановите вашу длительно выполняющуюся задачу с помощью Control+Z, затем введите что-то вроде:
fg; echo "Done!"
Если вы хотите по-разному реагировать в зависимости от успеха или неудачи вашей команды, используйте && и || как операторов короткого замыкания.
fg && echo "Успех!" || echo "Неудача!"
Источник: Как выполнить команду после выполнения текущей команды в bash?
В терминале, выполняющем длинную команду, просто введите say done и нажмите Enter. Когда длинная команда завершится, оболочка выполнит то, что вы ввели, как следующую команду для выполнения. Это предполагает, что длительная команда не собирается читать что-либо из stdin,
.
Ответ или решение
Да, существует несколько способов добавить команду для выполнения после завершения текущей долгосрочной команды в терминале.
Подходы к решению задачи
-
Использование fg с управляющими операторами:
Вы можете приостановить выполнение текущей команды, используя сочетание клавишControl+Z
. Это перенесет вашу команду в режим ожидания. Затем выполните следующую команду:fg; echo "Готово!"
Здесь
fg
возвращает задачу в активное состояние, аecho "Готово!"
будет выполнено после её завершения. Если вы хотите различать успех и неудачу команды, используйте:fg && echo "Успех!" || echo "Неудача!"
Это позволит вам вывести различные сообщения в зависимости от статуса завершения предыдущей команды.
-
Введение команд после долгосрочной операции:
Вы также можете ввести предполагаемую команду "say done" во время выполнения текущей операции. Как только долгосрочная команда завершится, введенная команда будет немедленно выполнена, при условии, что основная команда не нуждается во вводе данных с stdin.Таким образом, вы можете подготовить следующую команду заранее, не прерывая выполнение текущей.
Заключение
Таким образом, существует несколько подходов для добавления команд в очередь выполнения без прерывания долгосрочных процессов. Каждый из них имеет свои особенности и подходит для различных ситуаций. Использование управляющих операторов позволяет не только выполнить команду после завершения текущего процесса, но и динамически реагировать на результаты её выполнения. Этот подход помогает эффективно управлять временными затратами в процессе работы в терминале.
Убедитесь, что долгосрочная команда не требует взаимодействия с пользователем через стандартный ввод, чтобы избежать непредвиденных результатов.