我有一个脚本来检查我的环境,我想就如何处理"找不到命令"错误征求您的建议。
echo "...RVM Version : $(rvm -v)"
echo "...Node Version : $(node -v)"
echo "...Ruby Version : $(ruby -v)"
echo "...Bundler Version : $(bundle -v)"
echo "...Passenger Version: $(passenger -v)"
它显示node
的"找不到命令"和passenger
命令:
...RVM Version : rvm 1.29.7 (latest) by Michal Papis
deploy_confirm.sh: line 10: node: command not found
...Node Version :
...Ruby Version : ruby 2.6.0p0 (2018-12-25 revision 66547)
...Bundler Version : Bundler version 2.0.1
deploy_confirm.sh: line 13: passenger: command not found
...Passenger Version:
与其显示错误,不如显示"未找到",如下所示:
...RVM Version : rvm 1.29.7 (latest) by Michal Papis
...Node Version : Not found
...Ruby Version : ruby 2.6.0p0 (2018-12-25 revision 66547)
...Bundler Version : Bundler version 2.0.1
...Passenger Version: Not found
如果使用 bash>= 4.0,请在第一echo
行之前插入以下内容:
command_not_found_handle() { echo "not found"; return 127; }
然后在最后一行echo
之后插入它以摆脱此功能:
unset command_not_found_handle
输出,例如:
。RVM 版本 : 未找到 ...节点版本 : v4.2.6 ...Ruby 版本 : ruby 2.3.1p112 (2016-04-26) [x86_64-linux-gnu] ...捆绑器版本:未找到 ...乘客版本:未找到
包装器函数是获取自定义行为的简单方法,尤其是在不希望全局更改该行为的情况下。
or_not_found() {
if type "$1" >/dev/null 2>&1; then # if given a valid command
"$@" # run that command with original arguments
else
echo "Not found" # write to stdout so it's captured by the command substitution
fi
}
echo "...Login Shell User : $USER" # much more efficient than calling whoami
echo "...RVM Version : $(or_not_found rvm -v)"
echo "...Node Version : $(or_not_found node -v)"
echo "...Ruby Version : $(or_not_found ruby -v)"
echo "...Bundler Version : $(or_not_found bundle -v)"
echo "...Passenger Version: $(or_not_found passenger -v)"
使用2>/dev/null
禁止显示错误消息,并||
作为else
的简写。 如果命令a
失败,a || b
将运行b
。
echo "...Login Shell User : $(whoami)"
echo "...RVM Version : $(rvm -v 2>/dev/null || echo 'Not found')"
echo "...Node Version : $(node -v 2>/dev/null || echo 'Not found')"
echo "...Ruby Version : $(ruby -v 2>/dev/null || echo 'Not found')"
echo "...Bundler Version : $(bundle -v 2>/dev/null || echo 'Not found')"
echo "...Passenger Version: $(passenger -v 2>/dev/null || echo 'Not found')"