Я пытаюсь использовать tmux в скрипте, чтобы он выполнял команду, которая занимает некоторое время (скажем, 'ping - c 5 8.8.8.8', например) в новой скрытой панели при блокировке сам текущий скрипт до тех пор, пока не закончится эхо-запрос контролировать и / или взаимодействовать с ним (не обязательно пинговать).
(ср. РЕДАКТИРОВАТЬ)
Вот некоторый псевдо bash код, чтобы более четко показать, что я пытаюсь сделать:
echo "Waiting for ping to finish..."
echo "Ctrl-b + p to switch pane and see running process"
tmux new-window -d 'ping -c 5 8.8.8.8' # run command in new "background" window
tmux wait-for # display "Done!" only when ping command has finished
echo "Done!"
Я знаю, что команды tmux здесь на самом деле не имеют никакого смысла, но это просто для иллюстрации.
Я рассмотрел различные решения, чтобы либо отправить команду в фоновом режиме или дождитесь завершения процесса на другой панели, но я все еще не нашел способа сделать оба этих параметра правильно.
РЕДАКТИРОВАТЬ
Спасибо Nicholas Marriott за указание на то, что опция -d
существует, когда при открытии нового окна, чтобы избежать автоматического переключения на него. Теперь единственной проблемой является блокировка основного сценария до завершения команды.
Я попробовал следующее, надеясь, что это сработает, но также не сработает (сценарий не возобновляется).
tmux new-window -d 'ping -c 5 8.8.8.8; tmux wait -S ping' &
tmux wait $!
Возможно, есть способ поиграться с процессами (используя fg
, bg
...), но я до сих пор не понял.
Подобные вопросы:
[1] Сделать блокировку tmux до завершения программы
[2] Bash - выполнение сценариев блокировки в tmux
[3] Как скрыть tmux pane
[4] как ждать окончания первой команды до sh?