Process proc1 ='sh -c ps -ef'.execute();
Process proc2 ='sh -c grep sleep.sh '.execute();
Process proc3 ='sh -c grep -v grep '.execute();
Process proc4 ='sh -c awk sleep.sh '.execute();
Process all = proc1 | proc2 | proc3 | proc4;
// I tried this too and this didnt work
//println( [ 'sh', '-c', 'ps -ef | grep "sleep.sh" | grep -v "grep" | awk "sleep.groovy" ' ].execute().text )
//also tried without the awk
println all.text;
好吧,我想做的是 ps 我制作的 shell 脚本 (sleep.sh) [它所做的就是休眠一段时间]。不太确定该怎么做。这是我最好的猜测^^
result:
-sh-3.2$ ./callGroovy.sh testSleep.groovy
-sh-3.2$
不打印任何东西也不给我任何东西(callGroovy 是一个 shell 脚本,我用来调用我的 groovy 脚本)
如果我运行管道命令,除了 awk 之外,它们仍然可以工作
我认为我做错了 awk
这是其余的管道
-sh-3.2$ ps -ef | grep "sleep.sh" | grep -v "grep"
wasadmin ***** ***** 0 **:** pts/1 **:**:** /bin/bash ./sleep.sh
(其中所有 * 均为数字)
当我尝试只使用 grep 和 ps 的脚本时,它也没有给我这个输出。有什么建议么? ..PS 我还尝试在常规脚本中使用或不使用引号。不认为这会有所作为,但值得一试
贝壳-c
选项仅需要一个参数。从命令行尝试此操作,您也会看到它失败:
sh -c ps -ef | sh -c grep sleep.sh | sh -c grep -v grep | sh -c awk sleep.sh
它需要引号才能正常工作:
sh -c "ps -ef" | sh -c "grep sleep.sh" | sh -c "grep -v grep" | sh -c "awk sleep.sh"
您可以通过从字符串列表而不是字符串开始来正确引用命令:proc1 = ['sh', '-c', 'ps -ef']
。在本例中,您正在 groovy 中进行过滤,因此简单的解决方案就是不通过 shell 调用命令。尝试这个:
Process proc1 ='ps -ef'.execute()
Process proc2 ='grep sleep.sh '.execute()
Process proc3 ='grep -v grep '.execute()
Process proc4 ='awk sleep.sh '.execute()
Process all = proc1 | proc2 | proc3 | proc4
println all.text
最后,如果事情不能正常工作,使用以下命令读取 stderr 流会很有帮助
println all.err.text
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)