我正在编写一个shell脚本来创建/附加或切换到给定的会话,具体取决于是否在tmux中并且会话存在.
除了需要在tmux会话中创建新的tmux会话的情况之外,我已经完成了所有工作.
当我的脚本执行时tmux new-session -s name,我得到以下输出:
会话应该小心嵌套,取消设置$ TMUX强制
我实际上并不想嵌套会话,我的目标是创建另一个单独的会话并从tmux会话中切换到它.
这可能吗?
小智 121
最快的方式(假设您ctrl-b用作命令前缀)是:
ctrl-b :new
Run Code Online (Sandbox Code Playgroud)
那么,要创建一个新会话
ctrl-b s
Run Code Online (Sandbox Code Playgroud)
以交互方式选择并附加到会话.
Yon*_*onk 26
此脚本将检查会话是否存在.如果会话不存在,请创建新会话并附加到该会话.如果会话确实存在,则没有任何反应,我们会附加到该会话 随意用项目名称替换`〜/ 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
Run Code Online (Sandbox Code Playgroud)
让我们创建两个分离的会话,列出它们,附加到一个,然后从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]
Run Code Online (Sandbox Code Playgroud)
我们现在都在里面或更好地称为连接到我们的目标会话.如果我们尝试在附加时创建新会话,则会导致嵌套错误.
$ tmux new -s bar
> sessions should be nested with care, unset $TMUX to force
Run Code Online (Sandbox Code Playgroud)
为解决此问题,我们创建了一个新的分离会话.例如,
$ 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]
Run Code Online (Sandbox Code Playgroud)
循环(切换)会话
Prefix ( 上一届会议Prefix ) 下届会议注: Prefix为Ctrl-b默认.您可以绑定Prefix到Ctrl-aMac OSX并在Mac OSX中将Caps Lock更改为ctrlsystem preferences > keyboard > modifier keys
尝试在不分离的情况下附加到会话将导致错误.
$ tmux attach -t development
> sessions should be nested with care, unset $TMUX to force
Run Code Online (Sandbox Code Playgroud)
而是使用命令模式Prefix :然后键入attach -t session_name并按Enter键.
小智 23
使用这个对我有用:
TMUX= tmux new-session -d -s name
tmux switch-client -t name
Run Code Online (Sandbox Code Playgroud)
在TMUX=这样TMUX不会抛出第一线需要sessions should be nested with care, unset $TMUX to force的信息.
Mor*_*ock 15
所有的命令您可以在终端中启动,如tmux new -s sessionName可以从内推出tmux按触发键(如ctrl-b当时):没有开始那么命令tmux的一部分.
因此,ctrl-b :接下来new -s sessionName将完成您想要的操作,并为您的会话命名.它还会自动切换到新会话.
tmux switchc -t `tmux new -dP`
Run Code Online (Sandbox Code Playgroud)
要创建一个新会话并切换到它,从 tmux 会话插入并且不使用 tmux 命令,您需要分两步完成。
new-session以分离方式创建会话-d,并打印名称-P。捕获此输出。NEW_SESSION=`tmux new-session -dP`
Run Code Online (Sandbox Code Playgroud)
switch-client。使用 传递您的新会话作为目标-t。tmux switch-client -t $NEW_SESSION
Run Code Online (Sandbox Code Playgroud)
您可以创建一个单行代码来执行此操作:
tmux switch-client -t `tmux new-session -dP`
Run Code Online (Sandbox Code Playgroud)
或简写为:
tmux switchc -t `tmux new -dP`
Run Code Online (Sandbox Code Playgroud)
小智 5
在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"'
| 归档时间: |
|
| 查看次数: |
62430 次 |
| 最近记录: |