如果 .bashrc 存在于我的系统上,我如何让我的 .bashrc 仅调用 TMUX?

Mic*_*ant 7 tmux bashrc

我在大多数盒子上使用 tmux,但不是全部。

我的 .bashrc 文件中有以下行:

[ -z "$TMUX" ] && export TERM=xterm-256color && exec tmux
Run Code Online (Sandbox Code Playgroud)

如果存在则调用 tmux。

认为[ -z $TMUX ]意味着只有在 tmux 存在时才会使用它。

但是在另一个系统上,没有 tmux,我得到

-bash: exec: tmux: 未找到

并且登录尝试失败

在我的主系统上,我看到

$ echo $TMUX
/private/var/folders/ks/266xy5lj7x35gfj4csc66444b48rvq/T/tmux-373580663/default,55084,4
Run Code Online (Sandbox Code Playgroud)

我也试过[ $TMUX ](即没有-z)但这没有帮助

我也在寻找一个适用于 Ubuntu 和 OSX 的强大解决方案

pol*_*lym 7

echo $TMUXtmux会议上做过吗?因为TMUX只有在会话时才设置。

试试这个:

[ -z "$TMUX" ] && command -v tmux >/dev/null && TERM=xterm-256color exec tmux
Run Code Online (Sandbox Code Playgroud)

  • @polym which(1) 是一个外部程序,用于在 PATH 中搜索可执行文件。它在不同系统上的行为不同,您不能依赖有用的退出代码;使用(从大多数到最不便携)''command -v'' 或 ''type -P''(查找路径)或 ''hash''(检查)。见 http://mywiki.wooledge.org/BashFAQ/081 (5认同)
  • 更简洁的解决方案是`which tmux &>/dev/null && ...`。捕获输出并测试是否为空只是脏:-) (2认同)

mik*_*erv 5

好的,所以如果您只想tmux在它存在$PATH 尚未运行时启动,那么您可以执行以下操作:

command -v tmux >/dev/null && ${TMUX+:} TERM=xterm-256color exec tmux
Run Code Online (Sandbox Code Playgroud)

更短:

tmux -c "${TMUX+!} :" 2>/dev/null && exec tmux -2
Run Code Online (Sandbox Code Playgroud)

第二个要求tmux返回 0 如果${TMUX}未设置为&&true,则 shelltmux -2执行强制 256 色。如果tmux可以运行$PATH并且环境变量$TMUX不存在,它只会返回true 。