我至少在一個問題上坐在這裏,真的讓我失望了!Linux shell命令對於Runtime.exec()(屏幕命令)來說會表現得很奇怪
我正在寫一個簡單和小型的java程序,輕鬆地將任何命令傳遞給(linux)屏幕會話。
Shell command: bash -c "screen -p 0 -S sessionname -X eval 'stuff \"some command\"\015'"
當我在命令行中輸入這個命令時,它一切正常! 但是,如果我讓一個Java程序做到這一點,就什麼都不會發生!甚至沒有消息或錯誤或提示!根本沒有! 我讓程序回顯生成的屏幕命令,如果我把這個輸出粘貼到shell中,它就可以工作。
這裏是我的Java代碼:
static public void screenCmd() throws IOException
{
String command = "bash -c \"screen -p 0 -S screenname -X eval 'stuff \\\"cmd\\\"\\015'\"";
System.out.println("debug: '" + command + "'"); //output would work
//when copy and paste it to the shell
InputStreamReader isr = new InputStreamReader(
Runtime.getRuntime().exec(command).getInputStream()
);
//for debug output
BufferedReader br = new BufferedReader(isr);
String line = "";
while ((line = br.readLine()) != null)
System.out.println(line);
}
最有趣的是,所有其他的shell命令都在工作。 我嘗試了Java執行尾巴,whoi,cp,ls,...沒有任何問題。爲什麼不屏幕?
Java程序由啓動屏幕會話的同一用戶啓動。
如果有人有一個甚至小想法請報告!我在這裏瘋狂駕駛!
p.s .:屏幕會話還運行一個java程序! (可能是問題的一部分?)
謝謝。
你爲我做了一天!那是真實的! – Seraph 2012-01-27 13:22:43
好的,謝謝任何人在這裏寫的,特別是Joni Salonen! ) 我現在做這樣的: 公共無效doCommand(字符串命令)拋出IOException異常,InterruptedException的 { 字符串[] CMD = { 「屏幕」, 「-p」, 「0」, 「-S」 ,「screenname」,「-X」,「eval」,「stuff \」「+ command +」\「\\ 015」}; \t \t process = new ProcessBuilder(cmd)。開始(); retVal = process.waitFor(); } – Seraph 2012-01-27 13:40:27