我有一个(长)
Bash脚本,它做这样的事情:
set -o nounset
set -o errexit
set -o pipefail
echo -e "foo \n bar" | grep "baz" | tr -d ' '
echo "here"
脚本失败,没有错误消息,因为grep命令返回错误1而不打印任何错误消息.
如何使我的脚本健壮?
最佳答案 如果模式不匹配,grep将产生非零退出代码.而且,它不会产生任何错误信息.如果在输入中找不到模式,为了获得错误消息,您需要一个替代方案.你可以使用awk:
echo -e "foo \n bar" | \
awk 'BEGIN{f=0}/baz/{f=1;print;}END{if (!f) {print "Error; string not found"; exit 1;}}' | \
tr -d ' '
这与grep(就退出代码而言)非常相似,并且如果找不到匹配则会产生错误消息.
为了将错误消息输出到STDERR,您可以说:
echo -e "foo \n bar" | \
awk 'BEGIN{f=0}/baz/{f=1;print;}END{if (!f) {print "Error; string not found" > "/dev/stderr"; exit 1;}}' | \
tr -d ' '