在不同的工作目录中执行shell进程时,我可以使用通配符吗?

时间:2012-12-28 09:26:03

标签: groovy

这是我目前的目录结构

/ <-- current working Dir
  /php/
    file1.php
    file2.php
    file3.txt

我正在尝试执行以下groovy命令

def cp = 'cp -f *.php /tmp/'
def cpProc = cp.execute(null, new File('./php/')
cpProc.waitfor()
log.info 'current exitvalue :' + cpProc.exitValue()
log.info 'current proc out : ' + cpProc.text

但我一直在cp: cannot stat *.php': No such file or directory,我已经验证了文件的存在,并且我已经验证了我当前的工作目录

如果我执行log.info 'ls -la'.execute(null, new File('./php/')),我会看到PHP和.txt文件。

这似乎是一个很长的镜头,但我认为在指定的工作目录中执行命令时可能会出现使用通配符的错误,除非有些东西我不知道?

我正在使用groovy 1.7.5

1 个答案:

答案 0 :(得分:2)

这个版本适合我,试试看:

    #!/usr/bin/env groovy

    command = ["sh", "-c", "cp -f *.php /tmp/"]
    def cpProc = command.execute(null, new File('./php/'))
    cpProc.waitFor()
    print 'current exitvalue :' + cpProc.exitValue() + '\n'
    print 'current proc out : ' + cpProc.text + '\n'

    print 'ls -la'.execute(null, new File('/tmp/')).text

此问题的第一个答案解释了为什么您的版本不起作用:Groovy execute "cp *" shell command