2014-01-17 3 views
2

zenity/yad를 사용하여 wget 다운로드 프로세스를위한 GUI를 제공하려고합니다. 나는 이것으로 생각해 냈다.wget과 zenity/yad 결합하기

wget http://example.com/ 2>&1 | \ 
sed -u 's/^[a-zA-Z\-].*//; s/.* \{1,2\}\([0-9]\{1,3\}\)%.*/\1\n#Downloading... \1%/; s/^20[0-9][0-9].*/#Done./' | \ 
zenity --progress --percentage=0 --title=Download dialog --text=Starting... --auto-close --auto-kill 

이제 wget이 오류로 실행된다고 가정 해 보겠습니다. 다운로드가 실패했다는 사실을 사용자에게 알려야합니다. $? 변수가 성공 또는 실패에 관계없이 0 값을 갖고있는 것 같습니다 (아마도 $?이 우수의 종료 상태를 저장하고 있기 때문에?) 다운로드가 실패했는지 또는 성공했는지 알 수 없습니다.

위의 설명 된 문제를 어떻게 해결할 수 있습니까?

+2

중간 파일로 스크립트를 작성해야하므로 중간 상태를 캡처 할 수 있다고 생각합니다. – GreenAsJade

답변

3

당신은 말할 수 있습니다 : 그렇게 말하는

set -o pipefail 

0이 아닌 상태로 종료 파이프 라인의 마지막 명령의 종료 코드를보고 $?을 일으킬 것입니다.

The Set Builtin에서 인용 :

설정하면

pipefail

는, 파이프 라인의 반환 값이 아닌 제로 상태로 종료 마지막 (가장 오른쪽) 명령의 값, 또는 제로 경우입니다 모든 파이프 라인의 명령이 성공적으로 끝납니다. 이 옵션은 기본값에 의해 비활성화됩니다.


또한, 배열 PIPESTATUS는 파이프 라인의 모든 명령의 리턴 코드를보고하는 것입니다. 말하는 :

echo "${PIPESTATUS[@]}" 

모두 나열합니다. 예를 들어 3 개의 숫자가 표시됩니다 (예 :

1 0 0

wget 경우 실패했습니다.

manual 인용 :

PIPESTATUS

에게 가장 최근에 실행 된 전경 파이프 라인의 처리에서 종료 상태 값들의 목록을 포함하는 배열 변수 (배열 참조) (여기서 수도 단일 명령 만 포함).