shell脚本中的输出重定向不能完全正常工作

时间:2016-08-27 11:25:14

标签: bash shell

>cat test.sh
#!bin/bash
testf="/home/vidya/test/"
cd $testf
`make clean all` >/dev/null 2>&1
if [ -e test ]
then
`./test << end
source(scripts/all.src);
quit;
end` >/dev/null 2>&1
echo -e "\nLog Result is:`grep Tests test.log | tail -1`\n"
fi

当我在下面运行上面的脚本时输出。 这里的问题是即使我在执行测试用例时使用了输出重定向,但它仍然在控制台上打印,例如&#34;打开文件....&#34;对于每个文件。 它重定向大多数测试用例执行但不完全。 无论如何在控制台上抑制此输出?

[vidya ]$ sh test.sh
Opened file </home/vidya/test/scripts/all.src>
Opened file </home/vidya/test/scripts/file1>
Opened file </home/vidya/test/scripts/file2>
.
.
.
Opened file </home/vidya/test/scripts/file10>

Log Result is:    Tests: 1005 PASSED / 48 FAILED

2 个答案:

答案 0 :(得分:0)

bash中的遗留后退标记或现代$()表示命令替换,即后面标记中包含的内容的输出将被执行,因为它是一个命令

更改

`make clean all` 1>/dev/null 2>&1

make clean all >/dev/null 2>&1 # Removed the backticks

您可以考虑放置

,而不是输出重定向
exec 1>&3 #making a copy file descriptor 1(stdout) to 3.
exec 1>/dev/null 2>&1

在shebang之后的test.sh开头,默默地运行脚本。然后在你需要开始的地方 再次打印,恢复设置

exec 3>&1 Restoring file descriptor 1 to stdout.

答案 1 :(得分:0)

正如sjsam已经回答删除了反引号。我认为语法就像这样

./test >/dev/null 2>&1 << end
source(scripts/all.src);
quit;
end