>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
答案 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