个人有两份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

 COMMAND  PID   USER   FD   TYPE             DEVICE SIZE/OFF   NODE NAME
tmux sinfor cwd DIR , /home/sinfor
tmux sinfor rtd DIR , /
tmux sinfor txt REG , /usr/bin/tmux
tmux sinfor mem REG , /lib/x86_64-linux-gnu/libnss_files-2.19.so
tmux sinfor mem REG , /lib/x86_64-linux-gnu/libnss_nis-2.19.so
tmux sinfor mem REG , /lib/x86_64-linux-gnu/libnsl-2.19.so
tmux sinfor mem REG , /lib/x86_64-linux-gnu/libnss_compat-2.19.so
tmux sinfor mem REG , /lib/x86_64-linux-gnu/libpthread-2.19.so
tmux sinfor mem REG , /lib/x86_64-linux-gnu/libc-2.19.so
tmux sinfor mem REG , /lib/x86_64-linux-gnu/libresolv-2.19.so
tmux sinfor mem REG , /usr/lib/x86_64-linux-gnu/libevent-2.0.so.5.1.
tmux sinfor mem REG , /lib/x86_64-linux-gnu/libtinfo.so.5.9
tmux sinfor mem REG , /lib/x86_64-linux-gnu/libutil-2.19.so
tmux sinfor mem REG , /lib/x86_64-linux-gnu/ld-2.19.so
tmux sinfor 0u CHR , 0t0 /dev/null
tmux sinfor 1u CHR , 0t0 /dev/null
tmux sinfor 2u CHR , 0t0 /dev/null
tmux sinfor 3u unix 0x0000000000000000 0t0 socket
tmux sinfor 4u unix 0x0000000000000000 0t0 socket
tmux sinfor 6u unix 0x0000000000000000 0t0 /tmp/tmux-/default
tmux sinfor 8u CHR , 0t0 /dev/ptmx
tmux sinfor 9u CHR , 0t0 /dev/ptmx
tmux sinfor 10u CHR , 0t0 /dev/ptmx
tmux sinfor 11u CHR , 0t0 /dev/ptmx
tmux sinfor 12u CHR , 0t0 /dev/ptmx
tmux sinfor 13u CHR , 0t0 /dev/ptmx
tmux sinfor 14u CHR , 0t0 /dev/ptmx

lsof -c tmux

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

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

man tmux socket

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

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

man tmux socket

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

解决方法:  

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

OK,大功告成,Enjoy!

〖Linux〗在tmux同时使用bash和zsh的更多相关文章

  1. linux、mac的bash和zsh如何切换

    1.hostname 192-23-2-2 修改主机名字 2.chsh -s /bin/bash和chsh -s /bin/zsh可以永久切换,也就是一登录进来的就是相应的界面 bash/zsh命令是 ...

  2. Linux之tmux学习

    Linux之tmux学习 前言 在Linux的世界中,命令行是最优雅的交互方式. 但是,只会使用一个交互终端的程序员,是不足以成为Linux下的大牛的. 那么tmux是什么,引用一下原文介绍 tmux ...

  3. shell自动补全功能:bash和zsh

    首要一点:shell有多种,比如bash.zsh.csh.ksh.sh.tcsh等 因此,制作自动补全功能时,要先搞清楚,你使用的是哪种shell,各个shell制作方法是不同的,网上大部分介绍的是关 ...

  4. Linux编程 3 (初识bash shell与man查看手册)

    一.初识bash shell 1.1 启动 shell   GNU bash shell 能提供对Linux系统的交互式访问.通常是在用户登录终端时启动,登录时系统启动shell依赖于用户账户的配置. ...

  5. Linux下通过受限bash创建指定权限的账号

    在日常业务运维中,有时为了配合解决问题,需要给非运维人员开通系统账号,用于查询日志或代码.通常为了系统安全或避免不必要的误操作等目的,会将账号权限降至最低.下面介绍下在Linux下通过受限bash创建 ...

  6. Mac zsh切换bash bash切换zsh

    切换bash    ————>>>chsh -s /bin/bash 切换zsh      ------->>>chsh -s /bin/zsh

  7. Bash 和 Zsh 开启 vi-mode

    Bash 和 Zsh 开启 vi-mode bash 有两种操作模式,分别是 emacs 和 vi . 在 bash 中 set -o vi # 临时开启 vi 模式 vi ~/.bashrc # 在 ...

  8. zsh切换bash bash切换zsh

    切换bash(需要sudo) chsh -s /bin/bash 切换zsh(不需要sudo) chsh -s /bin/zsh 注意:如果输入命令和密码后提示:no change made. 请加上 ...

  9. bash和zsh切换

    zsh切换bash bash切换zsh 切换bash chsh -s /bin/bash 切换zsh chsh -s /bin/zsh

随机推荐

  1. Svg.js 图片加载

    一.SVG.Image 1.创建和修改图片 var draw = SVG('svg1').size(300, 300); //SVG.Image 加载图片文件 var image = draw.ima ...

  2. Excel 2016 Power View选项卡不显示的问题

    https://zhuanlan.zhihu.com/p/43543442 PowerView是Excel中的Power系列插件之一,可以基于excel制作交互式仪表板. 初学者在使用Power Vi ...

  3. iOS "directory not found for option '-L/Users/.../Pods/build/Debug-iphoneos"解决方式

    问题重述: 在删掉原来工作空间,又一次install pods之后,遇到warning: ld: warning: directory not found for option '-L/Users/. ...

  4. javascript——select 标签的使用

    <% String state = (String) request.getAttribute("state"); String day = (String) request ...

  5. linux命令学习——md5sum

    1.简介 MD5算法常常被用来验证网络文件传输的完整性,防止文件被人篡改.MD5 全称是报文摘要算法(Message-Digest Algorithm 5),此算法对任意长度的信息逐位进行计算,产生一 ...

  6. 自己定义View时,用到Paint Canvas的一些温故,简单的帧动画(动画一 ,&quot;掏粪男孩Gif&quot;顺便再提提onWindowFocusChanged)

    转载请注明出处:王亟亟的大牛之路 之前在绘画的过程中提到了静态的旋转啊,缩放啊,平移等一些效果.那么自己定义的View当然也有动态的效果也就是我们的Animation.经常使用的有三种 View An ...

  7. 如何用Docker建立一个Node.js的开发环境

      建立一个文件夹 用管理员身份打开powershell. 在文件夹下面运行npm init, 根据提示填入信息,以便产生一个package.json文件. 在文件中加入需要的dependencies ...

  8. mysql insert 主键 重复问题

    转自:http://blog.163.com/liuweiyoung@126/blog/static/173131045201222122732435/ mysql中insert into和repla ...

  9. LXC 容器集chroot使用说明

    1.1 LXC是什么? 1.1.1 关于LXC LXC,其名称来自Linux软件容器(Linux Containers)的缩写,一种操作系统层虚拟化(Operating system–level vi ...

  10. 撼动 IT 界的十大编程语言【转载+整理】

    提这些的目的是要保持关注最新的技术.如果你是一个程序员,想要探究未来技术,那这篇文章是你的必读之选.这里列出了10种编程语言,它们可能会改变IT界的工作方式. 下面这些语言都有其实际的需求,举例来说, ...