〖Linux〗在tmux同时使用bash和zsh

个人有两份tmux配置文件:

  ~/.tmux.conf # 使用zsh,主要是日常使用,zsh太好使用了

  ~/.tmux.conf.bash # 使用bash,主要是Android编译使用

按照tmux的man手册,可以使用 -f config_file 来指定tmux使用的配置文件,于是:

alias ta='tmux -f ~/.tmux.conf attach -t'
alias tab='tmux -f ~/.tmux.conf.bash -L bash attach -t'
alias tl='tmux list-sessions'
alias ts='tmux -f ~/.tmux.conf new-session -s'
alias tsb='tmux -f ~/.tmux.conf.bash -L bash new-session -s'

但是发现怎么也不能够同时使用bash和zsh:

  一旦使用了配置 ~/.tmux.conf 启动一个session之后,

  再使用配置文件 ~/.tmux.conf.bash 怎么也是启动了zsh,而不是期望的bash

于是再仔细看看tmux使用的文件:

  lsof -c tmux

 1 COMMAND  PID   USER   FD   TYPE             DEVICE SIZE/OFF   NODE NAME
 2 tmux    3015 sinfor  cwd    DIR              252,2    12288 131073 /home/sinfor
 3 tmux    3015 sinfor  rtd    DIR              252,0     4096      2 /
 4 tmux    3015 sinfor  txt    REG              252,0   467144   6935 /usr/bin/tmux
 5 tmux    3015 sinfor  mem    REG              252,0    47712 420929 /lib/x86_64-linux-gnu/libnss_files-2.19.so
 6 tmux    3015 sinfor  mem    REG              252,0    47760 420932 /lib/x86_64-linux-gnu/libnss_nis-2.19.so
 7 tmux    3015 sinfor  mem    REG              252,0    97296 420878 /lib/x86_64-linux-gnu/libnsl-2.19.so
 8 tmux    3015 sinfor  mem    REG              252,0    39824 394969 /lib/x86_64-linux-gnu/libnss_compat-2.19.so
 9 tmux    3015 sinfor  mem    REG              252,0   141574 420941 /lib/x86_64-linux-gnu/libpthread-2.19.so
10 tmux    3015 sinfor  mem    REG              252,0  1845024 420912 /lib/x86_64-linux-gnu/libc-2.19.so
11 tmux    3015 sinfor  mem    REG              252,0   101240 420871 /lib/x86_64-linux-gnu/libresolv-2.19.so
12 tmux    3015 sinfor  mem    REG              252,0   276880  13239 /usr/lib/x86_64-linux-gnu/libevent-2.0.so.5.1.9
13 tmux    3015 sinfor  mem    REG              252,0   167096 398434 /lib/x86_64-linux-gnu/libtinfo.so.5.9
14 tmux    3015 sinfor  mem    REG              252,0    10680 420938 /lib/x86_64-linux-gnu/libutil-2.19.so
15 tmux    3015 sinfor  mem    REG              252,0   149120 420915 /lib/x86_64-linux-gnu/ld-2.19.so
16 tmux    3015 sinfor    0u   CHR                1,3      0t0   1052 /dev/null
17 tmux    3015 sinfor    1u   CHR                1,3      0t0   1052 /dev/null
18 tmux    3015 sinfor    2u   CHR                1,3      0t0   1052 /dev/null
19 tmux    3015 sinfor    3u  unix 0x0000000000000000      0t0  18129 socket
20 tmux    3015 sinfor    4u  unix 0x0000000000000000      0t0  18130 socket
21 tmux    3015 sinfor    6u  unix 0x0000000000000000      0t0  18131 /tmp/tmux-1000/default
22 tmux    3015 sinfor    8u   CHR                5,2      0t0   7595 /dev/ptmx
23 tmux    3015 sinfor    9u   CHR                5,2      0t0   7595 /dev/ptmx
24 tmux    3015 sinfor   10u   CHR                5,2      0t0   7595 /dev/ptmx
25 tmux    3015 sinfor   11u   CHR                5,2      0t0   7595 /dev/ptmx
26 tmux    3015 sinfor   12u   CHR                5,2      0t0   7595 /dev/ptmx
27 tmux    3015 sinfor   13u   CHR                5,2      0t0   7595 /dev/ptmx
28 tmux    3015 sinfor   14u   CHR                5,2      0t0   7595 /dev/ptmx
lsof -c tmux

  发现/tmp/tmux-1000/default有点蹊跷,于是再仔细看看man文档,其中包含socket的描述如下

1      -L socket-name
2                    tmux stores the server socket in a directory under /tmp (or TMPDIR if set); the default socket is
3                    named default.  This option allows a different socket name to be specified, allowing several inde‐
4                    pendent tmux servers to be run.  Unlike -S a full path is not necessary: the sockets are all cre‐
5                    ated in the same directory.
6      -S socket-path
7                    Specify a full alternative path to the server socket.  If -S is specified, the default socket
8                    directory is not used and any -L flag is ignored.
man tmux socket

  仔细分析了一下这里的信息,原来在未指定socket文件(-L)或路径(-S)时,都默认使用了同一个socket,man描述中还提到:

1 In tmux, a session is displayed on screen by a client and all sessions are managed by a single server.  The
2      server and each client are separate processes which communicate through a socket in /tmp.
man tmux socket

  所以,正是因为他们都使用了这个/tmp/tmux-1000/default,导致了指定配置文件对于新开的session无效

解决方法:  

1 alias ts='tmux -f ~/.tmux.conf -L zsh new-session -s'
2 alias tsb='tmux -f ~/.tmux.conf.bash -L bash new-session -s'
3 alias tl='tmux -L zsh list-sessions|sed "s/^/[zsh] /g"; tmux -L bash list-sessions|sed "s/^/[bash] /g"'

OK,大功告成,Enjoy!

posted @ 2014-11-28 10:23  scue  阅读(3534)  评论(0编辑  收藏  举报