ネットワーク接続がないため、apt-getアップデートが失敗したことをどのように検出しますか?

ネットワーク接続がないため、apt-getアップデートが失敗したことをどのように検出しますか?

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

おすすめ記事