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

  • Шрифт / SSH-взаимодействие?
  • Запретить закрытие окна / окна при завершении команды - tmux
  • Привязка к различным окнам в сеансе
  • Tmux, изменить окно окна с помощью мыши
  • tmux: вращать панели вертикально или горизонтально
  • tmux zoom (z) не работает для меня
  • что задает -g означает в файлах конфигурации?
  • tmux при запуске и проблемах с отправкой ssh-agent
  • 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 .

    Interesting Posts

    Изменение цвета фона терминала GNOME на лету

    Серийный кабель Usb (плодовитый) не работает с драйвером ftdi_sio на изображении rpi-buildroot

    Пользователь без пароля – как войти в эту учетную запись из учетной записи, отличной от root

    Почему значение BASH_SUBSHELL не изменяется при изменении значения SHLVL?

    Virtualbox не может загрузить плагин платформы Qt «xcb» на Crunchbang Waldorf

    Что такое UUID Wi-Fi сети?

    Удаленная служба аудита (например, append-only pastebin)

    Как получить функции, распространяемые на подоболочку?

    Как решить проблему ntp «Не удалось связаться с сервером времени» из KDE?

    Эффективная фильтрация многих файлов по их содержимому с помощью awk / sed / grep

    Как обманывать / издеваться над каталогом, используемым двоичным приложением в качестве другого каталога?

    UEFI + BIOS загрузочный live Debian растяжка amd64 с сохранением

    Исключение «sudo» из истории оболочки

    Размер холста Gimp с помощью терминала

    Обновление OpenSSL на сервере SLES11

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