我正在使用 curl 通过 HTTP 帖子将文件上传到服务器。
curl -X POST -d@myfile.txt server-URL
Run Code Online (Sandbox Code Playgroud)
当我在命令行上手动执行此命令时,我会收到来自服务器的响应,例如"Upload successful". 但是,如果我想通过脚本执行此 curl 命令,如何确定我的 POST 请求是否成功?
从这个问题展开,我们有一个用例,我们希望根据该命令是成功还是失败来通过管道传输命令的标准输出。
我们从一个基本的管道开始
command | grep -P "foo"
Run Code Online (Sandbox Code Playgroud)
但是我们注意到有时command不会向 stdout 输出任何内容,但确实有退出代码0. 我们想忽略这种情况,只grep在退出代码是1
对于一个工作示例,我们可以实现这样的命令:
command | grep -P "foo"
Run Code Online (Sandbox Code Playgroud)
但这有许多缺点,即您必须编写脚本,这意味着您不能只在控制台中执行它。这似乎也有些业余。
为了更简洁的语法,我想象了一个虚构的三元运算符,如果退出代码是1,则它会进行管道传输,否则它将向前传递退出代码。
OUTPUT=$(command) # exit code is 0 or 1
RESULT=$?
if [ $RESULT -eq 0 ]; then
return $RESULT; # if the exit code is 0 then we simply pass it forward
else
grep -P "foo" <<< $OUTPUT; # otherwise check if the stdout contains "foo"
fi
Run Code Online (Sandbox Code Playgroud)
是否有一系列操作符和实用程序可以达到这个结果?