2011-05-10 56 views
2

我喜欢使用-x开关使用bash调试脚本。唯一的缺点是,echo命令也显示其可以创建很多不必要的重复的:bash中:表示执行的命令预期回声

#!/bin/bash 
echo "Changing to /etc directory" 
cd /etc 

然后,一旦运行:

$ bash -x test.sh 
+ echo 'Changing to /etc directory' 
Changing to /etc directory 
+ cd /etc 

我试图与bash -x test.sh | grep -v '+ echo'滤除但它不工作。

[问]有没有办法阻止-x也显示echo命令?

感谢

+0

的问题是,-x是写入标准错误,你是唯一管道标准输出。只要将你的grep改为: bash -x test.sh 2>&1 | grep的-v“+回声” – frankc 2011-05-10 18:59:26

回答

3

您可以通过您所选择的正则表达式引擎将其过滤:

$ ./test.sh 2>&1 | awk '{if(!match($0, /^\+ echo/)){print $0}}' 

$ ./test.sh 2>&1 | grep -v '^\+ echo' 
+0

如果你要过滤你的输出,是不是很简单,只需使用'grep的-v“^ + echo''?这对'awk'很笨拙。 – Caleb 2011-05-10 15:02:08

+0

经过测试但不起作用。一些有趣的事情,我注意到的是,我甚至不能用grep出用'grep的-v'输出,当我使用'庆典-x'而与-v'作品'回声“东西”的grep做。 – Max 2011-05-10 15:05:27

+0

@Caleb是的,这是一个更好的主意。我忘了该选项:) @ user359650的bash -x被写入标准错误。你需要将stderr pipe到标准输出并grep。我用一个例子更新了我的答案。确实是 – sapht 2011-05-10 15:09:16