![apt-get은 종료 상태를 업데이트합니다.](https://linux55.com/image/35556/apt-get%EC%9D%80%20%EC%A2%85%EB%A3%8C%20%EC%83%81%ED%83%9C%EB%A5%BC%20%EC%97%85%EB%8D%B0%EC%9D%B4%ED%8A%B8%ED%95%A9%EB%8B%88%EB%8B%A4..png)
상태를 확인하는 방법은 무엇입니까 apt-get update
?
$ apt-get update ; echo "status is: $?"
Err http://security.debian.org stable/updates Release.gpg
Could not resolve 'security.debian.org'
Hit http://192.168.1.100 stable Release.gpg
Hit http://192.168.1.100 stable Release
Hit http://192.168.1.100 stable/main i386 Packages
Hit http://192.168.1.100 stable/contrib i386 Packages
Hit http://192.168.1.100 stable/non-free i386 Packages
Ign http://192.168.1.100 stable/contrib Translation-en
Ign http://192.168.1.100 stable/main Translation-en
Ign http://192.168.1.100 stable/non-free Translation-en
Reading package lists... Done
W: Failed to fetch http://security.debian.org/dists/stable/updates/Release.gpg Could not resolve 'security.debian.org'
W: Some index files failed to download. They have been ignored, or old ones used instead.
status is: 0
보안 업데이트를 가져오는 동안 오류가 발생했지만 종료 상태는 0입니다.
내 목표는 apt-get update가 올바르게 실행되고 있는지 확인하는 스크립트입니다.
답변1
이러한 경고를 오류로 바꾸려면 이 적절한 옵션을 사용하십시오.
apt-get update -o APT::Update::Error-Mode=any
원하는 경우 conf 파일에서 설정할 수도 있습니다.
답변2
귀하의 예에서는 apt-get update
문제를 치명적인 오류가 아닌 경고로 처리하므로 오류 종료가 없습니다. 치명적인 오류가 발생하면 0이 아닌 상태로 종료됩니다.
이상 현상을 식별하는 한 가지 방법은 다음 패턴을 확인하는 것입니다 stderr
.
W:
다음으로 시작하는 줄E:
다음으로 시작하는 줄
apt-get update
위의 패턴이 일치하거나 종료 코드가 0이 아닌 경우 다음과 같은 방법을 사용하여 실패를 시뮬레이션할 수 있습니다.
if ! { sudo apt-get update 2>&1 || echo E: update failed; } | grep -q '^[WE]:'; then
echo success
else
echo failure
fi
!
패턴이 일치 하면 , 즉 오류가 있으면 성공적으로 종료되기 때문 if
입니다 . grep
오류가 없으면 grep
자동으로 실패합니다 . 따라서 if
조건은 음수 종료 코드입니다 grep
.
답변3
apt-get의 out/err을 먹지 않으려면(예를 들어 로그 파일에 쓰는 경우) 이것이 더 쉬운 옵션일 수 있습니다.
sudo apt-get update 2>&1 | tee /tmp/apt.err && ! grep -q '^[WE]' /tmp/apt.err
나중에 삭제할 새 파일을 남기지 않으면 좋겠지만 grep을 tee 출력으로 바꾸면 종료 코드를 가져오기가 더 어려울 것 같습니다.
답변4
특수 변수 $?를 사용하여 마지막 명령의 종료 상태를 확인할 수 있습니다. 오류 출력을 먼저 표준 출력으로 리디렉션할 수도 있습니다.
OUTPUT=`apt-get update 2>&1`
if [[ $? != 0 ]]; then
echo "$OUTPUT"
fi