1 回答

TA貢獻(xiàn)1880條經(jīng)驗(yàn) 獲得超4個(gè)贊
在評(píng)論中回顧了這個(gè)之后,很明顯問題是 .jar 文件試圖進(jìn)行交互——要求在光標(biāo)處輸入一些內(nèi)容——而 AppleScript 的設(shè)計(jì)不是為此而設(shè)計(jì)的do shell script。AppleScript 可以從 shell 獲取錯(cuò)誤和輸出,但它無法將響應(yīng)反饋給 shell,或者判斷 shell 腳本是否正在等待輸入。
如果 .jar 文件不能在非交互模式下運(yùn)行,那么 AppleScript 確保進(jìn)程結(jié)束的唯一方法是獲取其進(jìn)程 ID 號(hào),等待一段合理的時(shí)間,然后向其發(fā)送終止信號(hào)。該腳本如下所示:
on RunFile(jar_location)
set pid to do shell script "cd " & jar_location & " ; cat 'prompt.csv' | sh 'runScript.sh' 'WSO' &> /dev/null & echo $!"
-- wait 5 seconds, or whatever seems appropriate for the task to complete
delay 5
try
do shell script "kill " & pid
end try
end RunFile
附加的&> /dev/null & echo $!短語分離 shell 腳本,允許 AppleScript 向前移動(dòng),并返回進(jìn)程的進(jìn)程 ID 供以后使用。我將 kill 信號(hào)放在一個(gè) try 塊中,這樣如果進(jìn)程已經(jīng)正常退出,腳本就不會(huì)拋出錯(cuò)誤。
添加回答
舉報(bào)