我是bash脚本的新手,这里基本上是我的bash脚本:
Z=`diff -Z $ref_out $exec_out | grep "[<>]" | wc -l` 2>/dev/null
if [ $Z -gt 0 ]; then
echo "*** testcase: [ stdout - FAILED ]"
else
echo "*** testcase: [ stdout - PASSED ]"
fi
我想从diff中删除错误消息,例如:
diff: No such file or directory
这可能是因为没有$ ref_out或$ exec_out文件,但是我重定向到/ dev / null,这个错误信息仍然显示出来。 有什么帮助吗?
答案 0 :(得分:3)
你需要diff
的stderr转到/ dev / null,所以它应该是:
Z=`diff -Z $ref_out $exec_out 2> /dev/null | grep "[<>]" | wc -l`
答案 1 :(得分:0)
您的重定向不起作用,因为它正在应用于父shell,而不是运行管道的子shell。
如果你想将一堆命令的stderr发送到/ dev / null,你可以这样做 - 我使用的是$()
而不是backticks:
Z=$( { diff -Z $ref_out $exec_out | grep "[<>]" | wc -l; } 2>/dev/null )
此处,2>/dev/null
适用于{ }
内的所有命令。
您的代码中存在许多问题。你可以用更好的方式重写它:
if diff -Z "$ref_out" "$exec_out" 2>/dev/null | grep -q "[<>]"; then
echo "*** testcase: [ stdout - FAILED ]"
else
echo "*** testcase: [ stdout - PASSED ]"
fi
grep -q
是进行此项检查的更好方式,除非您想知道匹配的确切数量,否则您不会需要wc -l
if
语句可以包含命令;您不需要捕获输出以便在if语句中使用它您可以使用shellcheck验证您的shell脚本,看看您是否犯了可能导致代码破坏的常见错误。