내 스크립트에 오류 검사 솔루션을 추가하고 싶습니다. 다음과 같습니다.
! [ `echo $?` != 0 ] || echo "omg, st went wrong, CTRL+C? `read`"
내 목표는 이 줄이 실행될 때 "$?"를 확인하는 것입니다. 0이 아닌 경우 "OMG, st에 문제가 발생했습니다. CTRL+C?"를 표시한 다음 사용자 입력이나 Ctrl+C를 기다립니다. 그러나 "OMG, st에 문제가 발생했습니다. CTRL+C?"를 인쇄하기 전에 입력을 기다리기 때문에 한 줄씩 작동하지 않습니다. 텍스트. 누구든지 내가 무엇을 놓치고 있는지 도와줄 수 있나요?
감사해요.
업데이트: 다음과 같이 st 명령 다음에 이 작업을 수행하는 것이 가장 좋습니다.스크립트에 줄 오류가 있는지 확인하세요.
"나쁜 명령"은 "uname -k"입니다. 좋은 명령은 "echo hi"입니다. uname은 0이 아닌 종료 코드를 제공하고 echo는 0을 제공합니다.
답변1
이는 정확합니다. `read`
실행되고 결과가 로 전송되는 문자열에 삽입됩니다 echo
.
이 모든 보간법 등을 사용하면 수행하는 방식이 매우 어렵습니다.
if [[ $? -ne 0 ]]; then
echo -n 'command failed. ^C or "q" to abort.'
read c
[[ "$c" == q ]] && exit
fi
답변2
해결책을 얻었습니다.
$ uname -k || echo 'omg, fail' || read
uname: invalid option -- 'k'
Try `uname --help' for more information.
omg, fail
$ echo hi || echo 'omg, fail' || read
hi
$
업데이트: 이런, 텍스트를 인쇄한 후에는 입력을 기다리지 않습니다. \
답변3
오랫동안 실행되는 스크립트를 작성할 때 팝업 창을 통해 경고를 받는 것을 선호합니다. 예를 들어 Zen으로 가득 찬
if [[ $? -ne 0 ]]; then
if zenity --question --text="Omg, something went wrong, do you wish to continue?"; then
echo continue with program
else
echo "exiting" && exit;
fi
fi
이렇게 하면 다른 작업을 수행할 수 있고 문제가 발생하면 알림을 받을 수 있습니다. 또한 zenity 정보 메시지는 일반적으로 스크립트 끝에 배치됩니다.