コマンドを実行するスクリプトがありますが、apt-get update
インターネットがないため、スクリプトは失敗を検出できません。
つまり、ルートapt-get
で実行されていないと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.]
「壁」をエコーに変更できます。私は多くのSSHを使用しているので、友達を悩ませたいと思います。 (Debian の 1/2、SSH の 1/2.. 端末アプリやシェルから)
答え3
私はこの--error-on=any
オプションが意図した目的に合うと思います。しかし、これまで実際に使った経験はほとんどありません。私はこれがapt
andの比較的新機能だと思います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
ノートパソコンのWi-Fiをオフにして起動するとapt update --error-on=any; echo $?
印刷さecho
れます100
。