我开发了一个脚本,用一个命令向我显示我的工具版本
代码:link to github repo
结果摘要:
###############################################
########## versions (alphabetically) ##########
###############################################
bash: 3.2.57(2)-release`<br>
java: 1.7.0`<br>
/export/home/zmbf8bl/.mw701/10_scripts_tools/versions/versions.sh: line 137: npm: command not found`<br>
/export/home/zmbf8bl/.mw701/10_scripts_tools/versions/versions.sh: line 146: node: command not found`<br>
zsh: 4.3.6`<br>
###############################################
特殊的行为应该是,如果一个工具不可用,脚本就不会打印任何关于它的信息。在Windows和macOS上工作,但不在Linux上
Linux打印输出例如npm: command not found
。
如果我的机器上没有工具(例如npm),我该如何避免出现此错误消息并且不打印任何内容?
非常感谢!
答案 0 :(得分:2)
只需替换
2>&1
代码中的
2>/dev/null
一般来说,命令未找到错误是打印到stderr 当你进行版本检查时,将stderr重定向到/ dev / null 那么你只会获得stdout信息
答案 1 :(得分:1)
要检查$ PATH中是否存在该命令,请执行
checkCommand () {
if command -v "$1" >/dev/null; then
: # OK command exists
else
echo >&2 "$1: no such command"
return 1
fi
}
if checkCommand npm; then ...
答案 2 :(得分:0)
有几种方法可以实现这一点,你可以明确地使用类似type
命令的东西,如果你知道你可以测试的完整路径,如果文件存在并且你有执行访问权限(-x
) ,或者你可以使用if
:
#!/bin/bash
if ! npm arg1 arg2
if (( ? != 127 ))
then
echo "npm failed $?"
fi
fi
如果找不到命令,Bash返回127。
编辑:您仍然会收到command not found
错误消息,但它不会停止您的计划。忽略所有错误消息的问题是,如果程序运行但以其他方式失败,您将丢失错误消息,并且您不知道它为什么不起作用。