2011-11-23 118 views
0

我的这个脚本正在慢慢变大。它的输出在调用时被传送到一个文件(稍后用于构建电子邮件主体),但是,我在该脚本中调用了一个特定的命令,该命令的输出要修剪。Bash脚本。在输出到文件的脚本中隐藏一个特定命令的输出

我试图做

./somecommand | egrep "pattern1|pattern2" 

其中在常规控制台窗口,但工作正常时,偷偷溜进我的更大的脚本,该管的egrep被忽略,“./somecommand”的全输出登录到父脚本的输出中。

如何解决?

我保持这个问题模糊,以避免复制粘贴整个该死的东西。更多信息可以根据要求提供。是的,脚本中的脚本中的脚本,我们需要更深入,等等。我最多可以使用五个脚本来处理不同的任务,作为更大型的多服务器备份操作的一部分。主操作脚本被输出到电子邮件正文周围的文本文件中,作为最终用户看到的日志记录。我在主脚本中调用的一个特定脚本非常“嘈杂”,因此egrep只抓取与用户相关的输出。

谢谢大家!

+0

你可以在壳调试,'设置-vx'转,和编辑您的问题只显示其中的代码被执行,与输出的一点点的地方。你的egrep模式中是否有'*'字符?你的脚本是否在内部使用'exec ... 2>&1'捕获/重定向?祝你好运。 – shellter

回答

0

你试过grep -v选项吗?你是否在一些命令文件中获得了所有脚本的单行输出?如果多数民众赞成的情况下,那么你可以使用grep -v“模式”

+0

不,你误解了,在输出到文件的脚本中调用管道和grep时根本不起作用。我的grep行在常规控制台窗口中工作正常,它会修剪./somecommand的输出并很好地输出到stdout,当该行插入到脚本内时,它会忽略您附带的“| egrep”pattern1 | pattern2“ – reldred

+0

('1'左边的符号)?要么你必须包含#!/ bin/bash头文件或者用bash scipt.sh运行它,或者把命令放在(')符号中并运行脚本 – Ajai

+0

尝试使用 包含#!/ bin/bash头文件 – reldred

0

您可以尝试在调试模式下运行脚本,这样的:

bash -x ./script 
1

是否有可能./somecommand其输出发送到stderr而不是stdout?你可以尝试:

./somecommand 2>&1 | egrep "pattern1|pattern2" 
+0

另一个想法是......如果在进程的菊花链中涉及到ssh,那么./somecommand可能会在命令本地运行但是在你的脚本中远程执行? – phatfingers

+0

不是,不应该走向stderr,但我会在明天恢复工作时尝试执行,所有命令都在本地运行,不涉及SSH。 nks – reldred

+0

任何会影响./somecommand输入的东西,不管是管道输入,params还是ENV变量,这会使它在上下文中产生不同的输出,而不是在命令行中隔离它。 – phatfingers