如何在 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 字符串。
我要执行以下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 字符串。