我想使用脚本打开一个带有6个窗口的tmux会话,每个窗口位于不同的目录中.我开始使用我发现的脚本并首先尝试了这个:
tmux new-session -s xyz -n etc -d 'cd /etc'
tmux new-window -t xyz:1 -n var 'cd /var/log'
Run Code Online (Sandbox Code Playgroud)
但我很快发现这不会像我预期的那样工作 - 在shell命令完成后窗口将被关闭.
所以我的下一个想法就是开始这样一个新的shell:
tmux new-session -s xyz -n etc -d 'cd /etc; bash -i'
tmux new-window -t xyz:1 -n var 'cd /var/log; bash -i'
tmux new-window -t xyz:2 -n var2 'cd /var/log; bash -i'
tmux new-window -t xyz:3 -n var3 'cd /var/log; bash -i'
tmux new-window -t xyz:4 -n var4 'cd /var/log; bash -i'
tmux new-window -t xyz:5 -n var5 'cd /var/log; bash -i'
tmux new-window -t xyz:6 -n var6 'cd /var/log; bash -i'
tmux select-window -t xyz:1
tmux -2 attach-session -t xyz
Run Code Online (Sandbox Code Playgroud)
这几乎可行.但是,如果我启动超过4个窗口,我经常在启动后在其中一个窗口中看到以下bash错误:
bash: [: =: unary operator expected
bash: [: too many arguments
bash: [: =: unary operator expected
bash: [: =: unary operator expected
bash: [: =: unary operator expected
bash: [: =: unary operator expected
bash: [: too many arguments
bash: [: =: unary operator expected
bash: [: =: unary operator expected
bash: [: =: unary operator expected
bash: [: =: unary operator expected
bash: [: =: unary operator expected
Run Code Online (Sandbox Code Playgroud)
我不知道为什么会这样,但我仍然认为我做得不对.有没有更好的方法在几个目录上设置tmux会话?
Wil*_*ill 31
Tmuxinator也非常好.基本上你创建安装文件,如下所示:
# ~/.tmuxinator/project_name.yml
# you can make as many tabs as you wish...
project_name: Tmuxinator
project_root: ~/code/rails_project
socket_name: foo # Not needed. Remove to use default socket
rvm: 1.9.2@rails_project
pre: sudo /etc/rc.d/mysqld start
tabs:
- editor:
layout: main-vertical
panes:
- vim
- #empty, will just run plain bash
- top
- shell: git pull
- database: rails db
- server: rails s
- logs: tail -f logs/development.log
- console: rails c
- capistrano:
- server: ssh me@myhost
Run Code Online (Sandbox Code Playgroud)
然后你可以开始一个新的会话:
mux project_name
Run Code Online (Sandbox Code Playgroud)
我已经使用了一段时间,并且在大多数情况下都有很好的体验.
Chr*_*sen 21
shell错误可能是由于启动文件中的某些问题(或者它们运行的东西).
正如shellter评论的那样,set -vx在启动序列的早期暂时包含命令是查找错误发生位置的好方法.
如果您发现-vx输出过于冗长,可以尝试"printf debugging"(手动将调试语句添加到启动文件中,直到您可以精确地缩小导致错误的行):
echo start of .bashrc并echo end of .bashrc在您的开始/结束时查看您.bashrc的错误是否发生.bashrc.如果没有,请检测其他启动文件:.bash_profile/ .bash_login/ .profile.如果错误发生在该文件之前,那么问题可能在于/etc/profile.注意:这些调试添加需要是临时的,因为如果您使用自动登录的程序(例如rsync,基于SSH的Git访问等)会导致问题,因为这些程序需要"干净"的连接而没有这样的调试噪音当下.
应该没有必要cd在给予任何一个或的shell-command参数中使用这样的命令.tmux new-sessiontmux new-window
一个新的窗口将"继承" †当使用当前工作目录new-session和new-window在命令行(即,当通过完成tmux,而不是通过一个结合或在二进制,TMUX - :提示).根据CHANGES文件,从tmux 0.6 开始就是这种情况(至少对于new-window).
†这是tmux介导的继承,而不是父子继承,它是传递cwd的常用机制.
这个脚本适用于tmux 1.5:
#!/bin/bash
# var for session name (to avoid repeated occurences)
sn=xyz
# Start the session and window 0 in /etc
# This will also be the default cwd for new windows created
# via a binding unless overridden with default-path.
cd /etc
tmux new-session -s "$sn" -n etc -d
# Create a bunch of windows in /var/log
cd /var/log
for i in {1..6}; do
tmux new-window -t "$sn:$i" -n "var$i"
done
# Set the default cwd for new windows (optional, otherwise defaults to session cwd)
#tmux set-option default-path /
# Select window #1 and attach to the session
tmux select-window -t "$sn:1"
tmux -2 attach-session -t "$sn"
Run Code Online (Sandbox Code Playgroud)
这也可能(作为一个副作用)缓解你的shell启动错误,因为tmux启动shell的方式不同于plain bash -i(它更类似于bash -l,它使用你的.bash_profile/ .bash_login/ .profile代替你的.bashrc).
对于没有安装ruby tmuxp的人,可以在Python中使用,并支持Teamocil和Tmuxinator样式配置文件(在yaml和json中).
更不用说它背后有一个非常好的库 https://github.com/tony/libtmux
pip install --user tmuxp
Run Code Online (Sandbox Code Playgroud)
将〜/ .local/bin /添加到$ PATH for python用户安装程序
-
# ~/.tmuxp/workbench.yaml
session_name: workbench
windows:
- name: workbench
layout: main-vertical
panes:
- vim
- pane
- pane
Run Code Online (Sandbox Code Playgroud)
-
tumxp load workbench
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
41010 次 |
| 最近记录: |