Lin*_*eak 3 shell-script posix exit-status
我目前正在 POSIX shell 脚本中执行此操作:
success=false
pv --wait "$input_filename" | openssl enc -aes-256-cbc -d -salt -out "$output_filename" && success=true
if [ "$success" = "true" ]
...
Run Code Online (Sandbox Code Playgroud)
问题是,我不太确定,如果我这样做正确。
例如,我不明白那种方法和只是检查$?
.
我为什么在乎?
好吧,因为ShellCheck.net警告过我:
SC2181直接使用例如“if mycmd;”检查退出代码,而不是间接使用 $?。
如果您只需要检查命令是否成功,if command; then foo; else bar; fi
应该可以满足您的需求。
但是如果由于某种原因你需要做更复杂的错误处理,检查的值$?
会更合适:
command
case $? in
0) foo ;;
1) bar ;;
2) baz ;;
*) something_else ;;
esac
Run Code Online (Sandbox Code Playgroud)
根据您发布的链接,它应该是这样的:
if pv --wait "$input_filename" | openssl enc -aes-256-cbc -d -salt -out "$output_filename"; then
code for true
else
code for false
fi
Run Code Online (Sandbox Code Playgroud)
在我的测试中,这可能是管道的问题,具体取决于您另一端的内容……我认为使用 openssl 应该没问题,但是如果您正在使用类似的管道,cat
或者echo
我相信它总是会被视为成功,因为管道中的最后一个命令将成功退出。
如果你只有一个命令在成功或失败时执行,这样的事情也可能有效:
command && code for success
Run Code Online (Sandbox Code Playgroud)
或者
command || code for failure
Run Code Online (Sandbox Code Playgroud)