外部過程中,我有我想從常規執行類似運行從常規
some_shell_script.sh param1 "report_date=`some_function 0 \"%Y%m%d\"`"
該腳本命令行成功運行bash腳本,但是當我嘗試在Groovy
def command = "some_shell_script.sh param1 "report_date=`some_function 0 \"%Y%m%d_%H%M%S\"`""
def sout = new StringBuffer()
def serr = new StringBuffer()
//tried to use here different shells /bin/sh /bin/bash bash
ProcessBuilder pb = new ProcessBuilder(['sh', '-c',command])
Process proc = pb.start()
proc.consumeProcessOutput(sout, serr)
def status = proc.waitFor()
println 'sout: ' + sout
println 'serr: ' + serr
執行它
我有以下錯誤
serr: sh: some_function: command not found
同時
個which some_function
回報像
some_function()
{
;some definition here
}
功能定義看起來像當我運行從常規外部腳本它沒有父進程的背景下啓動不同的程序。我的意思是沒有父進程的函數定義存在。
任何人都知道如何應對這種情況?
不確定這是相關的,但**出口-f some_function **之前的常規會話解決了問題 – user1582639 2012-08-08 13:38:06
這將適用於您的登錄環境。 'export -f'將函數定義強制到腳本的環境中,該腳本又將其傳遞給由ProcessBuilder創建的bash實例。 *小心*,如果你把groovy腳本給別人,他們的環境可能沒有你定義的'some_function'。 – 2012-08-08 13:46:09