我目前正在 POSIX shell 脚本中执行此操作:
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