如何在 groovy 中使用 && 执行 shell 命令

How to execute shell command with && in groovy

我要执行以下shell命令

workon foo && python /path/to/bar.py --parm1 /path/p1 --parm2 /path/p2

我试过运行这样

    def sout = new StringBuffer(), serr = new StringBuffer()
    def proc = ["/bin/zsh","-c"," workon foo", "&&", "python", "/path/to/bar.py", "--parm1", "/path/p1", "--parm2", "/path/p2"].execute()
    proc.consumeProcessOutput(sout, serr)
    proc.waitForOrKill(1000)
    println "out> $sout err> $serr"

但我不断收到错误消息:

out>  err> zsh:1: command not found: workon

我可以从终端执行这个命令

正如@donkopotamus 所建议的那样,当调用 zsh -c 时,workon 可能不在您的路径中,也不在设置中(通过环境初始化)。您可能需要 "login shell" 来执行此操作 - 但请注意,我不使用或不太了解 zsh :)

试试 运行 zsh -l -c COMMAND

此外,您使用 -c 调用 zsh 的方式只能处理一个命令。其他一切都将被视为该命令的参数。

要使用 &&,您必须将其分配给 proc:

["/bin/zsh","-lc", "workon foo && python /path/to/bar.py ..."]

注意 -c 的参数是 one 字符串。