2011-11-28 80 views
1

我想根據這些方面做些事情。從Java運行bash

Process shell = Runtime.getRuntime().exec("/bin/bash"); 

然後,我想使用shell進程的流來與bash shell進行通信。然而,這似乎並不奏效,它完全讓我感到困惑。

我發現這link似乎談論同樣的問題。爲什麼會發生這種情況,是否有比鏈接中列出的解決方案更好的解決方案?

+0

從java啓動bash時,你需要什麼? – omarello

+0

你有什麼錯誤嗎? –

+0

@Siva沒有錯誤。執行shell.getOutputStream()。write(「touch blah」.getBytes())不會在任何地方創建文件。 – jetru

回答

2

可能需要將寫入從JVM刷新到子進程以確保其獲取輸入。 IIRC我不需要在Windows上這樣做,但是在Linux上。我還遇到了一些問題,我必須強制子進程刷新寫入,以便JVM也能馬上看到它們。

此外,請確保您有任何JVM線程讀取標準輸出和標準錯誤之前,如果任何緩衝區填滿它可以鎖定進程。這是Windows上的一個巨大問題。如果您在啓動流程時使用這些選項來合併流,則只需要一個線程。

另外,你的例子(上面),沒有換行符,不會bash需要嗎?例如「touch blah \ n」