1

我想运行一堆脚本并 grep 输出。例如,运行它并具有所需的输出行:

$ myScript.sh

运行它不会:

$ myScript.sh | grep something

经过进一步审查,myScript.sh 中有这个:

#!/bin/sh     
...
$JAVA_HOME/bin/java  the.real.script.is.here ${1+"$@"}

我假设“| grep something”被吸进了 $@ 列表。关于如何轻松管道输出的任何想法?谢谢!

编辑: 感谢大家提供有关如何解析变量的信息。问题一定是其他的。也许这就是我正在寻找的东西。在我的输出中,我正在寻找带有“/SE_2012.old”的行。我用“|grep old”再次运行脚本并没有输出。我用“| grep SE”运行它,得到了结果。我用“old”再次运行它,看看我是否发疯了,它确实了我一个结果。

4

2 回答 2

3

首先,你的假设是不正确的。shell 很好地解析了它的命令行,以区分管道和参数。这就是为什么您需要引号来转义重定向、管道、子shell 和其他低级表达式。

现在,手头的问题:假设您在运行时没有看到任何输出

$ myScript.sh | grep something

您可能会看到缓冲*. 不幸的是,我不能确切地告诉你它是如何在 java 应用程序中发生的,所以我不能给你一个直接的解决方案,但是如果你检查 java 代码的内部,你可能会知道。

*与输出只是去标准输出以外的地方相反。

于 2013-01-04T16:38:40.667 回答
1

“| grep something”不可能被吸进$@列表,所以应该还有问题。也许脚本对 tty 输出使用行缓冲,否则使用全缓冲?(您是否等待脚本完成才能得出结论它不起作用?)也许“grep something”中的“something”被解释为(意外地)与输入行不匹配的正则表达式?

  • 尝试cat而不是grep something:它有效吗?
  • 向我们展示“某物”的真正价值。
于 2013-01-04T16:38:44.007 回答