我目前在 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;”检查退出代码,而不是间接使用 $?。
如果您只需要检查命令是否成功,则
if command; then foo; else bar; fi
应该满足您的需求。但是如果由于某种原因需要进行更复杂的错误处理,检查 的值
$?
会更合适:根据您发布的链接,它应该是这样的:
在我的测试中,这可能是管道的问题,具体取决于你的另一端的情况......我认为使用 openssl 你应该没问题,但如果你正在管道到类似的东西,
cat
或者echo
我相信它总是会被视为成功,因为管道中的最后一个命令将成功退出。如果你只有一个命令在成功或失败时执行,这样的事情也可能有效:
或者