Uno-Choice動的参照パラメーターでシェルスクリプトを呼び出して、いくつかの操作(ファイルを作成し、呼び出されたシェルスクリプトから他のいくつかのシェルスクリプトを呼び出す)を実行したいと思います。
現在のところ、シェルスクリプトを呼び出して一部のファイルをcatすることはできますが、新しいファイルを作成したり、このファイルから別のシェルスクリプトを呼び出したりすることはできません。
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
その後、テストファイルは作成されません
より理解のために:
Bashスクリプトをgroovyラッパーから実行しているため、stdoutとstderrはすでにgroovyラッパーにリダイレクトされています。これを上書きするには、シェルスクリプト内でexec
を使用する必要があります。
例えば:
グルーヴィーなスクリプト:
def sout = new StringBuffer(), serr = new StringBuffer()
def proc ='./script.sh'.execute()
proc.consumeProcessOutput(sout, serr)
proc.waitForOrKill(1000)
println sout
script.sh
という名前のシェルスクリプトは、同じフォルダーにあります。
#!/bin/bash
echo "Test redirect"
上記のシェルスクリプトでgroovyを実行すると、groovyスクリプトのstdoutにTest redirect
という出力が生成されます
ここで、script.sh`にexec
を使用してstdoutリダイレクトを追加します。
#!/bin/bash
exec 1>/tmp/test
echo "Test redirect"
これでgroovyスクリプトを実行すると、コンテンツ/tmp/test
を含むファイルTest redirect
が作成されます
I/Oリダイレクトの詳細については、bashを参照してください here