我在POSIX shell(而不是bash)中实现了以下内容:
fail.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失败之前。
success.sh:
#!/bin/sh
echo something useful
echo warning 1 >&2
echo warning 2 >&2
exit 0
此命令将某些内容输出到stdout,并向stderr输出一些警告,但是使用退出代码0成功完成。
test.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
在这个脚本中,我想运行这两个脚本中的任何一个并提供以下功能:
我的脚本test.sh实现了所有这一切,但它使用了外部文件。由于我使用-e
,touch
只会在成功执行$script
时执行。我可以在没有这种技术的情况下捕获$script
的退出代码吗?
脚本必须用POSIX shell编写,并且必须使用-e
。
答案 0 :(得分:1)
#!/bin/sh -e
script=$1
if msg=$($script 2>&1 >useful); then
echo success
else
echo failure
msg=$(echo "$msg" | tail -1)
echo last error was: $msg
fi