when someone abandons you,it is him that gets loss because he lost someone who truly loves him but you just lost one who doesn’t love you.
Linux 环境多了,配置也就多,写脚本的时候遇到的问题也多,尤其是当你需要在脚本中用到一个命令的时候,除了内置命令,在用到新命令的时候还是需要先检查一下这个命令是否存在,推荐的方式有三个:command -v,type,hash,因为它们都是 shell builtin
1 | $ command -v anycommand >/dev/null 2>&1 || { echo >&2 "I require anycommand but it's not installed. Aborting."; exit 1; } |
小贴士:
什么是 hash?
linux 系统下会有一个 hash 表,刚开机时会显示 hash 为空,当你执行过一次或多次命令,hash 就会记录下执行过的命令的路径第一次执行命令 shell 解释器默认的会从 PATH 路径下寻找该命令的路径,当你第二次使用该命令时,shell 解释器首先会查看 hash 表,没有该命令会去 PATH 路径下寻找
hash 表的作用是什么?
hash 提高命令的调用速率
如果你想兼容 POSIX,请使用 command,如果是 bash,则三者均可
POSIX 没有很好地定义 type 和 hash 的退出代码,当命令不存在时,hash 可以成功地退出(type 中没有看到这一点)。POSIX 很好地定义了 command 的退出状态,因此使用它可能是最安全的,如果选用 hash,那这条命令将被加入 hash 表
不要使用 which
很多 linux 发行版上的 which 执行完后可能没有返回码,这就意味着在上面执行完 if which anycommand 不会奏效,即使 anycommand 命令不存在,系统也会报告存在,部分 POSIX 风格的 shell 对 hash 命令也会有类似情况
很多 linux 发行版上的 which 会做一些邪恶的事情,比如改变输出结果甚至会接入到包管理器中
be yourself, everyone else is already taken.