Bash,使用bash脚本检查程序是否安装

4

我正在尝试创建一个小脚本来检查程序是否已安装。 我正在尝试使用tmux,...

`tmux --help` | grep "tmux: command not found" &> /dev/null
if [ $? == 1 ]; then
    echo "tmux is not installed"
    exit
fi

安装了tmux后,我得到了以下提示:
usage: tmux [-2lquvV] [-c shell-command] [-f file] [-L socket-name]
            [-S socket-path] [command [flags]]
tmux is not installed

如果某个程序未安装,则会显示字符串“tmux: command not found”。这可以解释为什么我要grep tmux --help命令的输出。这是检查tmux是否已安装的正确方法吗?
该脚本始终会输出“tmux未安装”,即使我已经安装了tmux。它有什么问题?

1
你不想在 tmux --help 周围加上反引号,因为这会执行 tmux --help 并尝试将返回的帮助字符串作为命令执行。 - Etan Reisner
哈哈,你说得完全正确。 - sensorario
1个回答

9
您可以使用内置函数commandtypehash来测试给定命令在当前shell会话中是否可用。
但是,这并不会告诉您它是否可用于当前PATH之外的某个位置。
您应该避免使用which来进行此操作(即使这是许多人给出的默认建议),因为它不是一个标准化的工具(不完全是),而且它是一个外部工具,相比上述内置函数,它的检查成本更高。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接