Вы можете разделить несколько команд ;
, чтобы они выполнялись последовательно, например:
really_long_script.sh ; echo Finished
Если вы хотите выполнить следующую программу, только если скрипт завершил работу с кодом возврата 0 (что обычно означает, что он выполнен правильно), то:
really_long_script.sh && echo OK
Если вы хотите обратное (то есть продолжить только в случае сбоя текущей команды), чем:
really_long_script.sh || echo FAILED
Вы можете запустить ваш скрипт в фоновом режиме (но будьте осторожны, вывод скриптов ( stdout
и stderr
) будет продолжать идти на ваш терминал, если вы не перенаправите его куда-нибудь), а затем wait
для него:
really_long_script.sh &
dosomethingelse
wait; echo Finished
Если вы уже запустили скрипт, вы можете приостановить его Ctrl-Z
, а затем выполнить что-то вроде:
fg ; echo Finished
Где fg
выводит приостановленный процесс на передний план ( bg
заставит его работать в фоновом режиме, во многом как началось с &
)
fg
возвращает значение задания, которое оно возобновляет, вы можете использовать его,fg && echo Finished
если хотите убедиться, что команда выполнена успешно перед выполнением другой команды.Вы также можете использовать контроль работы Bash. Если вы начали
затем нажмите Ctrl + Z, чтобы приостановить его:
перезапустить задание в фоновом режиме (как если бы оно началось с
really_long_script.sh &
). Тогда вы можете подождать эту фоновую работу сгде N - идентификатор задания (вероятно, 1, если вы не выполняли никаких других фоновых заданий), который также отображается, как
[1]
указано выше.источник
Если процесс не выполняется на текущем tty, попробуйте это:
источник
watch
. Супер короткий ответ, и каждый узнает новый полезный способ использования часовОказывается, это не так сложно: вы можете просто набрать следующую команду в окне, пока работает существующая, нажать клавишу ввода, и когда первая из них завершится, вторая команда автоматически запустится.
Я предполагаю, что есть более изящные способы, но это, кажется, работает.
Редактирование, чтобы добавить, что если вы хотите запустить предупреждение после завершения команды, вы можете создать эти псевдонимы в .bashrc, а затем запустить,
alert
пока она выполняется:источник
Некоторое время назад я написал сценарий для ожидания завершения другого процесса.
NOISE_CMD
может быть что-то вродеnotify-send ...
, учитывая, чтоDISPLAY
установлен правильно.Без какого-либо шума, просто немедленно пошуметь. Это поведение позволяет что-то подобное для удобства (скажем, вы вызываете скрипт ниже
alarm.sh
):Конечно, вы можете сделать много забавных вещей с помощью такого скрипта, например, позволить экземпляру
alarm.sh
ждать экземпляраalarm.sh
, который ожидает какую-то другую команду. Или выполнение команды сразу после того, как какое-то задание другого вошедшего в систему пользователя завершилось ...>: DПредыдущая версия приведенного выше сценария может быть интересной, если вы хотите избежать зависимости
pgrep
и разрешить поиск идентификаторов процесса самостоятельно:Немного не по теме, но полезно в подобных ситуациях: может заинтересовать
reptyr
инструмент, который «крадет» процесс из некоторой (родительской) оболочки и запускает его из текущей оболочки. Я пробовал аналогичные реализации иreptyr
является самым красивым и надежным для моих целей.источник