1
我想根據這些方面做些事情。從Java運行bash
Process shell = Runtime.getRuntime().exec("/bin/bash");
然後,我想使用shell進程的流來與bash shell進行通信。然而,這似乎並不奏效,它完全讓我感到困惑。
我發現這link似乎談論同樣的問題。爲什麼會發生這種情況,是否有比鏈接中列出的解決方案更好的解決方案?
我想根據這些方面做些事情。從Java運行bash
Process shell = Runtime.getRuntime().exec("/bin/bash");
然後,我想使用shell進程的流來與bash shell進行通信。然而,這似乎並不奏效,它完全讓我感到困惑。
我發現這link似乎談論同樣的問題。爲什麼會發生這種情況,是否有比鏈接中列出的解決方案更好的解決方案?
可能需要將寫入從JVM刷新到子進程以確保其獲取輸入。 IIRC我不需要在Windows上這樣做,但是在Linux上。我還遇到了一些問題,我必須強制子進程刷新寫入,以便JVM也能馬上看到它們。
此外,請確保您有任何JVM線程讀取標準輸出和標準錯誤之前,如果任何緩衝區填滿它可以鎖定進程。這是Windows上的一個巨大問題。如果您在啓動流程時使用這些選項來合併流,則只需要一個線程。
另外,你的例子(上面),沒有換行符,不會bash需要嗎?例如「touch blah \ n」
從java啓動bash時,你需要什麼? – omarello
你有什麼錯誤嗎? –
@Siva沒有錯誤。執行shell.getOutputStream()。write(「touch blah」.getBytes())不會在任何地方創建文件。 – jetru