我想在Uno-Choice动态参考参数中调用shell脚本 并执行一些操作(创建一些文件并调用其他一些shell 来自被调用shell脚本的脚本。)
截至目前,我可以调用shell脚本并编写一些文件,但我无法使用 创建新文件或从中调用另一个shell脚本。
def sout = new StringBuffer(), serr = new StringBuffer()
// 1)
def proc ='cat /home/path/to/file'.execute()
//display contents of file
// 2)
def proc="sh /home/path/to/shell/script.sh".execute()
//to call a shell script but the above dosent work if I echo some contents
//into some file.
proc.consumeProcessOutput(sout, serr)
proc.waitForOrKill(1000)
return sout.tokenize()
例如: - script.sh
如果我添加行
echo "hello world" > test
然后没有创建测试文件
了解更多:
答案 0 :(得分:13)
由于您正在从groovy包装器运行bash脚本,因此stdout和stderr已经重定向到groovy包装器。要覆盖它,您需要在shell脚本中使用exec
。
例如:
groovy脚本:
def sout = new StringBuffer(), serr = new StringBuffer()
def proc ='./script.sh'.execute()
proc.consumeProcessOutput(sout, serr)
proc.waitForOrKill(1000)
println sout
名为script.sh
的shell脚本位于同一文件夹中:
#!/bin/bash
echo "Test redirect"
使用上面的shell脚本运行groovy将在groovy脚本的stdout上生成输出Test redirect
现在在script.sh`中添加带exec
的标量重定向:
#!/bin/bash
exec 1>/tmp/test
echo "Test redirect"
现在运行groovy脚本将创建一个文件/tmp/test
,内容为Test redirect
您可以在bash here
中阅读有关I / O重定向的更多信息