명령을 실행하는 스크립트가 있지만 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를 많이 사용하기 때문에 친구들을 괴롭히고 싶습니다. (데비안의 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
.