3

我希望能够执行嵌套的 shell 命令。例如;

final String cmd = 'for i in pom.xml projects.xml; do find . -name $i | while read fname; do echo $fname; done;done'

我尝试了以下语法,但无法使其运行。

  1. def result = cmd.execute();
  2. def result = ['sh', '-c', cmd].execute();
  3. def result = ('sh -c for i in pom.xml projects.xml; do find . -name $i | while read fname; do echo $fname; done;done').execute()

我会很感激这里的帮助。

4

2 回答 2

7

这应该有效:

def cmd = [
  'bash',
  '-c',
  '''for i in pom.xml projects.xml
    |do
    |  find . -name $i | while read fname
    |  do
    |    echo $fname
    |  done
    |done'''.stripMargin() ]

println cmd.execute().text

(我已经格式化了命令文本,所以在这里看起来更好,你可以把它全部放在一行中)

我也相信您的命令可以替换为:

find . -name pom.xml -o -name projects.xml -print

或者,在 Groovy 中:

def files = []
new File( '.' ).traverse() { 
  if( it.name in [ 'pom.xml', 'projects.xml' ] ) {
    files << it
  }
}

println files
于 2012-11-08T09:43:15.510 回答
3

感谢所有的帮助。这是一个很棒的社区。在传递环境和工作目录信息后,我能够得到这个工作。

def wdir = new File( "./", module ).getAbsoluteFile() ;
def env = System.getenv();
def envlist = [];
env.each() { k,v -> envlist.push( "$k=$v" ) }
final String cmd = 'for i in pom.xml projects.xml; do find . -name $i | while read fname; do echo $fname; done;done'
proc = ["bash", "-c", cmd].execute(envlist , wdir);
于 2012-11-08T13:52:12.027 回答