Linux 未找到包时打印错误消息的Shell脚本
我正在编写一个shell脚本,在执行任何操作之前,我需要检查是否安装了一些依赖项。我发现我可以使用Linux 未找到包时打印错误消息的Shell脚本,linux,bash,shell,console-output,Linux,Bash,Shell,Console Output,我正在编写一个shell脚本,在执行任何操作之前,我需要检查是否安装了一些依赖项。我发现我可以使用哪个来查看它是否已安装。问题是,当找不到该依赖项时,它会将以下错误抛出到控制台的输出中: 其中:没有abc(/home/pace/.emacs.d/bin:/usr/local/bin:/home/pace/.emacs.d/bin:/usr/local/bin:/home/pace/.local/bin:/usr/local/sbin:/usr/local/bin:/usr/bin:…) 我希望
哪个来查看它是否已安装。问题是,当找不到该依赖项时,它会将以下错误抛出到控制台的输出中:
其中:没有abc(/home/pace/.emacs.d/bin:/usr/local/bin:/home/pace/.emacs.d/bin:/usr/local/bin:/home/pace/.local/bin:/usr/local/sbin:/usr/local/bin:/usr/bin:…)
我希望避免这样的输出,因为我已经在出现故障时显示了错误消息。我怎样才能避免写任何东西
功能已安装(){
如果[[!$(哪一个$1)]]
然后
echo“[错误]:$1$2”
出口1
fi
}
好吧,可能有更好的方法来完成您想要做的事情(我不确定“最佳”方法),但您可以重定向stderr和stdout以隐藏输出结果:
function is_installed() {
if [[ ! $(which $1 > /dev/null 2>&1 ) ]]
then
echo "[ERROR]: $1 $2"
exit 1
fi
}
(bash的最新版本也支持同时使用&/dev/null
来实现这两个功能,但上述功能的可移植性稍高一些)
编辑--改为尝试此操作
function is_installed() {
which $1 > /dev/null 2>&1
if [ $? = 1 ] ; then
echo "[ERROR]: $1 $2"
exit 1
fi
}
如果我这样做,条件语句将停止工作,并且不再标识任何已安装的包。在编辑中为您替换了上面的代码。也不工作,因为set-euo pipefail
头,脚本会突然停止,而不显示任何错误消息。那么为什么要设置它?如果你有这一套,那么是的,你会遇到问题。但是您需要的退出状态,如果您有这些设置,那么您将无法获得它。为什么不在测试需求之后设置管道文件等呢?或者这些问题都不能回答我的问题。我想避免在找不到任何东西时抛出错误,通过我自己的错误跟踪,我已经知道如何找到路径。如果您删除该问题的负面反馈,我将不胜感激,因为它不是重复的。哪个
仍然是错误的解决方案,除非您专门锁定您确切知道的平台,哪个
。便携式POSIX解决方案是命令
(或者可能是类型
)。看见