tmux new-window – дождитесь окончания сеанса?

Я делаю следующее (это всего лишь пример, более сложные комбаты):

xterm -fa "Inconsolata" -e tmux new-session -s alpha & disown %% tmux new-window -t alpha bash tmux new-window -t alpha zsh 

… который отлично работает, когда я набираю его в терминале, предоставляя мне xterm с сеансом tmux с тремя окнами. НО, если я помещу вещь в сценарий, она перестанет работать;

  no server running on /tmp/tmux-1153/default no server running on /tmp/tmux-1153/default 

ошибка и только одно окно в новой сессии сеанса tmux .

После нескольких экспериментов я обнаружил, что он будет работать снова, если я добавлю

 sleep 5 

(или аналогичный) между командой disown и tmux new-window . Очевидно, что xterm не завершил настройку до запуска этой команды, и поэтому перед запуском сеанса будет запущено tmux new-window если я не задержу там задержку.

Он работает, но он не изящный. Есть ли способ сказать tmux подождать, пока сессия alpha будет поднята?

One Solution collect form web for “tmux new-window – дождитесь окончания сеанса?”

Вы можете сделать это двумя способами:

  1. Используйте метод sleep . Я не вижу ничего плохого в том, чтобы использовать sleep кроме как иногда, если вы выберете слишком короткое время. Чтобы обмануть его, используйте

     while ! tmux has-session; do sleep 1; done 

    или

     while ! tmux has-session -t alpha; do sleep 1; done 
  2. Используйте что-то вроде xtoolwait который запустит X-клиент (ваш эмулятор терминала) в фоновом режиме и вернется, когда он отобразил его окно.

Если вы перейдете ко второму варианту (что может быть лучше), не забудьте удалить & в конце команды, запускающей ваш терминал, а также отказаться disown работы.

Команда становится:

 xtoolwait xterm -fa "Inconsolata" -e tmux new-session -s alpha tmux new-window -t alpha bash 

Если xtoolwait еще не установлен в вашем Unix, он, скорее всего, будет доступен как пакет (он существует уже целую вечность ). Используйте его менеджер пакетов для его установки.

EDIT : из комментариев кажется, что tmux занимает слишком много времени, чтобы появиться после того, как терминал отобразил его окно, даже если используется xtoolwait . Поэтому в этой ситуации я бы продолжил цикл с вызовом sleep 1 до тех пор, пока не tmux сеансе tmux .

  • Какова конечная последовательность ANSI для gnome-end для «CTRL + arrow / s»?
  • Файл tmux.conf не будет использовать запятую в строках \;
  • Перенумерация окон в tmux
  • несоответствие версии протокола (клиент 8, сервер 6) при попытке обновления
  • tmux резко выходит сразу после загрузки
  • Как скомпилировать tmux 1.7 на CentOS 5.8?
  • tmux / screen ctrl + стрелка (слева направо) не работает на SSH
  • Автоматически находить позицию, начиная с последней команды, запущенной в tmux
  • Запустите программу сервера и разрешите пользователю подключаться к ней с помощью SSH
  • Создание сеанса tmux без привязки к нему
  • Перемещение панели tmux в окно
  • Linux и Unix - лучшая ОС в мире.