我目前有命令:
command -v gpg 2>/dev/null || { echo "Cound not find gpg. Aborting."; }
我不想将输出重定向到 /dev/null,而是想显示一条消息,说明 command 和 afterwords 的输出found!
。
IE
- 如果没有找到 gpg:
Cound not find gpg. Aborting.
- 如果找到 gpg:
gpg found at /usr/local/bin/gpg
我目前有命令:
command -v gpg 2>/dev/null || { echo "Cound not find gpg. Aborting."; }
我不想将输出重定向到 /dev/null,而是想显示一条消息,说明 command 和 afterwords 的输出found!
。
IE
Cound not find gpg. Aborting.
gpg found at /usr/local/bin/gpg
最简单的方法是这样的:
当然这不是很优雅,因为它需要运行
command
两次。另一种选择是:这可以解决问题:
尽管terdon♦接受的解决方案简短而漂亮,但我建议如下:
它处理了另一种方法未处理的两种情况:
别名:它们可能会隐藏可执行文件,但我的函数仅在存在可执行文件时才为您提供可执行文件的实际路径。其他方法将为您提供别名定义并返回零退出代码,无论其后面是否存在实际命令。
更好的错误处理:退出代码 127 代表“找不到命令”类型的错误,因此您可以对未找到命令和发生其他错误时进行单独的错误处理。
如果有一些不可估量的错误(即除了没有找到命令之外的未知错误),它不会隐藏它,误导你认为
gpg
它可能不存在。如果您想丢弃此错误,请按以下方式调用它:cmd_exists gpg 2>/dev/null
笔记:
关于别名,这可能是也可能不是您想要的,例如知道别名的存在可能对您来说就足够了。
Unalias 发生在子 shell 中,因此它不会弄乱您工作 shell 的别名。
关于错误处理,我不是 shell 脚本专家,所以我不知道在这种情况下发生错误的可能性有多大,也不知道是否有更好的方法来处理它们。
所以要小心,这可能是矫枉过正。