2013-05-06 76 views
59

我正在編寫一個創建/附加或切換到給定會話的shell腳本,具體取決於tmux是否位於會話中並且會話是否存在。在tmux會話中創建新的tmux會話

除了需要在tmux會話中創建新的tmux會話的情況外,我已經將所有的工作都很好。

當我的腳本執行tmux new-session -s name,我得到下面的輸出:

會議應被嵌套謹慎,未設置$ TMUX強制

我真的不希望巢會議,我的目標是創建另一個單獨的會話,並從一個tmux會話內切換到它。

這可能嗎?

回答

87

的最快方法(假設你使用ctrl-b作爲命令前綴)是:

ctrl-b :new 

要創建一個新的會話,然後

ctrl-b s 

交互式地選擇並連接到會議。

+4

+1對於不關心解決方案的應用程序應該小心嵌套,取消設置$ TMUX強制「 – 2014-10-14 13:20:21

+2

,然後你可以重新命名你的會話:'ctrl-b $' – nha 2015-02-09 14:30:54

+7

和'Ctrl-b:new -s '給出新會話的名字。 – 2015-04-28 11:50:39

18

使用這個工作對我來說:

TMUX= tmux new-session -d -s name 
tmux switch-client -t name 

在第一行的TMUX=所以TMUX不會引發sessions should be nested with care, unset $TMUX to force消息是必需的。

+1

將第一行改爲:'TMUX = \'tmux new-session -d -s name \'' – 2013-05-07 02:04:03

4

你可以試試unset TMUX首先,這對我有用。

11

所有命令您可以在終端中啓動,像tmux new -s sessionName可以從tmux內按觸發鍵啓動:無需啓動tmux一部分(例如ctrl-b)然後:然後命令。

因此,ctrl-b :後跟new -s sessionName將完全按照您的要求進行操作,併爲會話命名。它也自動切換到新的會話。

4

在user2354696的意見,我用下面的鍵綁定,以創建一個新的會話或「克隆」現有會話

 
bind-key N run-shell 'TMUX= tmux new-session -d \; switch-client -n' 
bind-key C run-shell 'TMUX= tmux new-session -t $(tmux display-message -p #S) -s $(tmux display-message -p #S-clone) -d \; switch-client -n \; display-message "session #S cloned"' 
8

如何創建腳本

如果會話存在該腳本將檢查。如果會話不存在,請創建新會話並附加到該會話。如果會話確實存在,則我們將附加到該會話。隨意用項目名稱替換`〜/ development'。

$ touch ~/development && chmod +x ~/development

# ~/development 

tmux has-session -t development 
if [ $? != 0 ] 
then 
    tmux new-session -s development 
fi 
tmux attach -t development 

從終端

新一屆讓我們創建兩個分離的會議,一一列舉了,通過會話連接到一個,然後從TMUX週期內。

tmux new -s name -d從tmux內部工作,因爲我們正在創建一個新的獨立會話。否則,你會得到一個嵌套錯誤。

$ tmux new -s development -d 
$ tmux new -s foo -d 
$ tmux ls 
> development: 1 windows (created Wed Jan 13 11:31:38 2016) [204x54] 
> foo: 1 windows (created Wed Jan 13 11:31:38 2016) [204x54] 
$ tmux attach -t 
$ tmux ls 
> development: 1 windows (created Wed Jan 13 11:31:38 2016) [204x54] (attached) 
> foo: 1 windows (created Wed Jan 13 11:31:38 2016) [204x54] 

從TMUX

內新一屆我們現在都在裏面或更好地稱爲連接我們的目標會話。如果我們嘗試在連接時創建新會話,將導致嵌套錯誤。

$ tmux new -s bar 
> sessions should be nested with care, unset $TMUX to force 

要解決這個問題,我們創建一個新的獨立會話。例如,

$ tmux new -s bar -d 
$ tmux ls 
> development: 1 windows (created Wed Jan 13 11:31:38 2016) [204x54] (attached) 
> foo: 1 windows (created Wed Jan 13 11:31:38 2016) [204x54] 
> bar: 1 windows (created Wed Jan 13 17:19:35 2016) [204x54] 

週期(開關)會話

  • Prefix(先前會話
  • Prefix)下一個會話

注:Prefix默認爲Ctrl-b。您可以綁定PrefixCtrl-a和Mac OSX上,您可以更改Caps Lock鍵爲Ctrl system preferences > keyboard > modifier keys

使用命令行模式中TMUX

試圖連接到會話不拆卸將導致一個錯誤,而附加到一個會話。

$ tmux attach -t development 
> sessions should be nested with care, unset $TMUX to force 

而是使用命令模式Prefix:然後鍵入attach -t session_name並回車。