2013-10-31 3 views
2

У меня возникли проблемы с получением нового сеанса для выполнения команды после создания.Как выполнить команду после открытия нового сеанса tmux

Вот часть моего .tmux.conf:

set-window-option -g automatic-rename off 
set-option -g allow-rename off 
new -A -s 'main' -n 'servers' 'ls' # troubled line 
splitw -h -p 35 htop 
splitw -v 
splitw -v -t 1 
splitw -v -t 1 
neww -n 'irc' weechat-curses 
selectw -t 0 

Это линия, что я работаю на:

new -A -s 'main' -n 'servers' 'ls' 

Вот как я открываю tmux:

alias tux='TERM=screen-256color-bce tmux -f ~/.tmux.conf attach-session -t main' 

«ls» должно вызывать ошибку, поскольку, когда она присутствует, начальная панель делает не создаются. Если я изменю его на «верх», он отлично работает и команда будет выполнена.

Итак, почему верхняя работа и не ls (или любая другая команда, которую я пытаюсь)?

ответ

5

top работает, пока вы не уйдете. ls выходы после этого распечатывают содержимое текущего каталога. Это вызывает окно, в котором заканчивается ls.

setw -t servers remain-on-exit on 

должен держать окно под названием «серверы» от закрытия после того, как его команда выходит, но это осложняется тем, что окно не существует перед командой new-session запускается, и после того, как new-session возвращается, он может слишком поздно, чтобы запустить команду setw (хотя вы можете попробовать).

Вместо этого создайте новый сеанс, в котором по умолчанию для окна, чтобы остаться после того, как его команда существует:

new -A -s 'main' -n 'servers' 'ls' # troubled line 
set -t main set-remain-on-exit on 
neww -n 'servers' ls 

На основании вашего последнего комментария, игнорировать выше, и заменить команду new с

new -A -s 'main' -n 'servers' 
send-keys -t servers.0 ls Enter 

Это создает регулярное окно, команда которого является регулярной оболочкой, а затем имитирует набрав команду ls в первой строке чтобы предоставить вам список файлов в этом каталоге. После завершения ls вы вернетесь в оболочку, и панель будет продолжать существовать, пока сама оболочка не завершится.

+0

Это не работает. Он создает начальный основной сеанс с окном, называемым серверами. Но когда он открывается, панель мертва. Я попытался использовать на 'respawnw -t servers', но создал 2-е окно, называемое серверами с предупреждением из нескольких панелей. – doremi

+0

См. Мое обновление. У меня также есть опечатка в оригинале, где команда 'new' должна просто читать' new -A -s 'main''. – chepner

+0

Я понял, как использовать 'send-keys' для выполнения того, что я хотел. Это не так чисто, как хотелось бы, потому что вы можете увидеть выданную команду, тогда как было бы неплохо просто увидеть результат из команды, но она работает. Кроме того, я не знал, что вы можете сделать точечную нотацию ('window.pane #') для флага -t. Это круто. – doremi

Смежные вопросы