我有一个运行该命令的脚本apt-get update
,但由于没有互联网,该脚本无法检测到故障。
即,如果apt-get
不是以 root 权限运行,则它会以code 100
.
所以我可以做一个检查
if apt-get update
then
echo "success!"
else
echo "something went wrong
fi
但如果apt-get update
在没有互联网连接的情况下运行,它会产生错误消息,一些是 STDOUT,一些是 STDERR,例如
这将转到 STDERR
...
W:获取失败http://archive.ubuntu.com/ubuntu/dists/trusty/InRelease
W:获取失败http://security.ubuntu.com/ubuntu/dists/trusty-security/InRelease
...
这将转到标准输出
...
Err http://archive.ubuntu.com trusty-updates Release.gpg
Temporary failure resolving 'archive.ubuntu.com'
Ign https://deb.nodesource.com trusty InRelease
Ign https://deb.nodesource.com trusty Release.gpg
...
但最终它仍然返回 的退出0
。
如何检测apt-get upgrade
因无法访问互联网而导致的故障?
答案1
这是一个可能效果更好的存根:
if apt-get update 2> /tmp/apt-get-errors
then
if grep -q "^W: Failed to fetch" /tmp/apt-get-errors
then
echo "success!"
else
echo apt-get failed to fetch
fi
else
echo "something went wrong
fi
rm /tmp/apt-get-errors
基本思想是将 apt-get 的 stderr 输出捕获到文件中,然后在该文件中搜索已知的错误模式,然后再声明成功。
它可以通过使用 mktemp 和可能更好的 grep 模式来改进,但我现在没有办法测试 apt-get 。
答案2
我不确定这是否万无一失,但我想您可以测试互联网连接是否正常,但我不确定错误是否是由于没有互联网连接引起的。
cd [directory]
wget [just download any file aslong as you know the name.]
[ -f /[currentDir]/[filename] ] && wall "Internet Connection Is Existant" || wall "Any errors are likely caused by internet issues."
rm [file name just so it doesn't mess things up later.]
你可以将“wall”更改为 echo 我只是喜欢烦我的朋友,因为我经常使用 SSH..(1/2 debian 和 1/2 时间在 SSH 上..在终端应用程序或 shell 上。)
答案3
我认为这个--error-on=any
选项可以达到预期的目的,尽管到目前为止我在实践中使用它的经验很少。我认为这是apt
和的一个相对较新的功能apt-get
:
-eany, --error-on=any Fail the update command if any error occured, even a transient one.
apt update -eany
apt update --error-on=any
apt-get update -eany
apt-get update --error-on=any
当我关闭笔记本电脑的 wifi 并运行时apt update --error-on=any; echo $?
,然后echo
打印100
.