コマンドを実行するスクリプトがありますが、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をテストする方法はありません。