我在 POSIX shell(不是 bash)中实现了以下内容:
失败.sh:
#!/bin/sh
echo something useful
echo warning 1 >&2
echo warning 2 >&2
echo an error message >&2
exit 100
该命令会打印我想在 stdout 上使用的内容、在 stderr 上的一些警告以及在 stderr 上的错误消息,然后在退出代码 100 失败之前打印出来。
成功.sh:
#!/bin/sh
echo something useful
echo warning 1 >&2
echo warning 2 >&2
exit 0
此命令向 stdout 打印一些内容,向 stderr 打印一些警告,但以退出代码 0 成功完成。
测试.sh:
#!/bin/sh -e
script=$1
rm -f success
msg=$({ $script > useful; touch success; } 2>&1 | tail -1;)
if [ -f success ]; then
echo success
else
echo failure
echo last error was: $msg
fi
在这个脚本中,我想运行这两个脚本中的任何一个并提供以下功能:
- 脚本的输出必须重定向到文件
- stderr 的最后一行必须保存到一个变量中,以便我可以稍后打印最后一行,以防命令没有成功退出
- 我想通过检查命令的退出状态来检测命令是否成功退出
我的脚本 test.sh 实现了所有这些,但它使用了一个外部文件。由于我使用只有成功-e
执行touch
才会$script
执行。$script
如果没有这种技术,我可以捕获退出代码吗?
该脚本必须用 POSIX shell 编写,并且必须使用-e
.