如何使 .bashrc 调用依赖于正在安装的 tmux 程序?

如何使 .bashrc 调用依赖于正在安装的 tmux 程序?

我的 .bashrc 中有一个部分可以启动 tmux 程序(终端多路复用器)。

但是,如果未安装 tmux 程序(假设我正在设置一台新计算机),那么将其放在我的 .bashrc 文件中将阻止任何终端窗口成功打开。

当然,安装 tmux 可以解决这个问题,但这不是我的问题。

我怎样才能使这个条件成为可能,以便如果 tmux不是安装后它不会崩溃/给出错误消息吗?

目前我有:

if [[ ! $TERM =~ screen ]]; then
  exec tmux
fi

我想要这样的东西:

if tmux; then
  if [[ ! $TERM =~ screen ]]; then
    exec tmux
  fi
fi

但这给了我

The program 'tmux' is currently not installed.  You can install it by typing:
sudo apt-get install tmux

虽然它至少给了我一个终端提示而不是关闭窗口!此外,如果/当安装 tmux 时,打开新的终端窗口时不会给出任何错误/导致任何问题。

答案1

您可以使用以下命令type查看您的机器上是否存在可执行文件:

if [ -n "$(type -P tmux)" ]; then

    ...tmux is installed...

else

    ...tmux isn't installed...

fi

我经常使用这个代码片段来做到这一点:

$ [ -n $(type -P tmux) ] && echo "installed" || echo "not installed"
installed

-n我可以使用(非空字符串)、-z(空字符串)的替代方案来伪造它。

$ [ -z $(type -P tmux) ] && echo "installed" || echo "not installed"
not installed

答案2

或者,如果您只想决定启动哪个可执行文件,您可以这样做:

executable=$(type -P tmux)
executable=${executable:-xterm} # For example
exec $executable

当且仅当之前没有分配任何内容时,扩展var=${var:-string}才会将值“string”分配给。varvar

相关内容