현재 POSIX 쉘 스크립트에서 이 작업을 수행하고 있습니다.
success=false
pv --wait "$input_filename" | openssl enc -aes-256-cbc -d -salt -out "$output_filename" && success=true
if [ "$success" = "true" ]
...
문제는 내가 이 일을 올바르게 하고 있는지 확신할 수 없다는 것입니다.
예를 들어, 저는 이 접근 방식이 단지 $?
.
내가 왜 신경쓰나요?
글쎄, 왜냐면ShellCheck.net나에게 경고하다:
SC2181$?를 사용하여 간접적으로 확인하는 대신 "if mycmd;"를 사용하여 직접 종료 코드를 확인하세요.
답변1
명령이 성공했는지 확인해야 한다면 이 if command; then foo; else bar; fi
방법을 사용하면 됩니다.
그러나 어떤 이유로 더 복잡한 오류 처리가 필요한 경우에는 확인된 값이 $?
더 적절할 것입니다.
command
case $? in
0) foo ;;
1) bar ;;
2) baz ;;
*) something_else ;;
esac
답변2
게시한 링크를 기준으로 보면 다음과 같습니다.
if pv --wait "$input_filename" | openssl enc -aes-256-cbc -d -salt -out "$output_filename"; then
code for true
else
code for false
fi
내 테스트에서 이것은 상대방의 상태에 따라 파이프에 문제가 될 수 있습니다. openssl을 사용하면 괜찮을 것이라고 생각하지만, cat
또는 같은 것으로 파이프하면 echo
항상 성공적인 것으로 간주될 것이라고 생각합니다. 파이프라인의 마지막 명령이 성공적으로 종료됩니다.
성공 또는 실패 시 실행되는 명령이 하나만 있는 경우 다음과 같은 것도 작동할 수 있습니다.
command && code for success
또는
command || code for failure