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 будет поднята?

  • tmux: переназначение клавиш на панель слева / справа / сверху / вниз
  • Использование TMUX при загрузке Linux CentOS
  • Могу ли я использовать Shift-Space в tmux keybinding?
  • Создать новое окно с текущим каталогом в tmux
  • Окно Vim в Tmux
  • Как заставить tmux-окно быть заданным размером
  • Состояние / Переключение переменных в tmux
  • подсветка режима копирования tmux
  • 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 .

    Linux и Unix - лучшая ОС в мире.