0

我在 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.

4

1 回答 1

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
于 2013-05-24T06:31:12.330 回答