[英]Run a compound shell command from Java/Groovy
我在嘗試從Groovy腳本運行復合shell命令時遇到了麻煩。 這是用“ &&”分隔的命令之一,因此如果第一個命令失敗,則第二個命令將永遠不會運行。 無論出於什么原因,我都無法正常工作。 我正在使用:
println "custom-cmd -a https://someurl/path && other-cmd -f parameter".execute([], new File('/some/dir')).text
Shell不斷誤解命令拋出的錯誤,例如“ custom-cmd -f無效選項”。這就像忽略了兩者之間的“ &&”一樣。 我也嘗試使用分號,但並不幸運。 我嘗試使用直接Java API Runtime.getRuntime()。exec()並將命令拆分為一個數組。 我嘗試將命令包裝在單引號中,並將其提供給'/ bin / sh -c',但沒有任何效果。
如何從Java運行復合Shell命令? 我知道我過去曾經做過,但是今天我無法弄清楚。
使用groovy,execute的列表形式應該可以工作:
def out = ['bash', '-c', "custom-cmd -a https://someurl/path && other-cmd -f parameter"].execute([], new File('/some/dir')).text
當然,您可能要在進程上使用consumeProcessOutput
方法,就像輸出太大一樣,調用文本可能會阻塞
嘗試類似:
Runtime.getRuntime().exec("cmd /c \\"start somefile.bat && start other.bat && cd C:\\\\test && test.exe\\"");
可以使用Runtime.getRuntime().exec()
而不將命令拆分為一個數組。
參見https://stackoverflow.com/a/18867097/1410671
編輯:
您是否嘗試過使用ProcessBuilder
? 這似乎可以在我的OSX機器上使用:
public static void main(String[] args) throws IOException {
ProcessBuilder builder = new ProcessBuilder( "/bin/sh", "-c", "echo '123' && ls" );
Process p=null;
try {
p = builder.start();
}
catch (IOException e) {
System.out.println(e);
}
Scanner s = new Scanner( p.getInputStream() );
while (s.hasNext())
{
System.out.println( s.next() );
}
s.close();
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.