首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在不同目录下的多个窗口中启动tmux?

如何在不同目录下的多个窗口中启动tmux?
EN

Stack Overflow用户
提问于 2011-12-17 00:30:16
回答 4查看 49K关注 0票数 36

我想使用一个脚本打开一个tmux会话与6个窗口,每个窗口在不同的目录。我从a script I found开始,并首先尝试了以下内容:

代码语言:javascript
复制
tmux new-session -s xyz   -n etc -d 'cd /etc'
tmux new-window  -t xyz:1 -n var    'cd /var/log'

但我很快就发现,这并不能像我预期的那样工作--在shell命令完成后,窗口将会关闭。

因此,我的下一个想法是创建一个新的shell,如下所示:

代码语言:javascript
复制
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

这几乎是可行的。但是如果我启动4个以上的窗口,在启动后我经常在其中一个窗口中看到以下bash错误:

代码语言:javascript
复制
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

我不知道为什么会发生这种情况,但我仍然认为我做得不对。有没有更好的方法来建立跨多个目录的tmux会话?

EN

回答 4

Stack Overflow用户

发布于 2013-03-30 00:41:41

Tmuxinator在这方面也做得很好。基本上,您可以像这样创建设置文件:

代码语言:javascript
复制
# ~/.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

然后,您可以使用以下命令启动新会话:

代码语言:javascript
复制
mux project_name

我已经使用它一段时间了,大部分时间都有很好的体验。

票数 32
EN

Stack Overflow用户

发布于 2013-05-10 00:40:32

您可以改用Teamocil。团队是一个简单的工具,用于自动创建会话,窗口和窗格的tmux与YAML文件。

票数 9
EN

Stack Overflow用户

发布于 2017-10-18 06:30:38

我无法让-c工作,所以我创建了一个通过发送运行的脚本来解决这个问题-这允许我在每个tmux会话中做任何我想做的事情。如果它对其他人有帮助,这里就是:

代码语言:javascript
复制
#!/bin/bash
TMUX_SESSION=mystuff
TOP=~/mydir

tmux new-session -s "$TMUX_SESSION" -n $(pwd) -d

launch_my_window()
{
    WINDOW=$1
    NAME=$2
    SUBDIR=$3

    SCRIPT=$TMPDIR/tmux.sh.$WINDOW.$NAME
    tmux new-window -t "$TMUX_SESSION:$WINDOW" -n "$NAME"
    cat >$SCRIPT <<%%
cd $TOP/$SUBDIR
# do more stuff here
%%
    chmod +x $SCRIPT
    tmux send -t "$TMUX_SESSION:$WINDOW" $SCRIPT ENTER
    sleep 1
}

launch_my_window 1 "stuff"         subdir1
launch_my_window 2 "morestuff"     subdir2
launch_my_window 3 "yetmorestuff"  subdir3
#...

# Select window #1 and attach to the WINDOW
tmux select-window -t "$TMUX_SESSION:1"
tmux -2 attach-session -t "$TMUX_SESSION"
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/8537149

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档