2009-12-29 162 views
0

所以我有一個java類,它將單獨的命令通過運行時和進程對象放到shell中。我的問題是,我可以運行像這樣的命令:通過java運行Shell腳本

$ls /users/me/documents 

,它會工作,但

$cd /users/me/documents 
$ls 

還列出了根。顯然,進程和運行時對象不會跟蹤它在哪裏。有什麼方法來捕獲終端對象,還是我必須手動跟蹤當前目錄?

回答

2

每個shell腳本都將重新開始。您需要將字符串的所有您的命令在一起:

cd /usr/me/documents && ls 

cd /usr/me/documents; ls 

如果CD是成功的(所以如果目錄是壞,LS將無法運行)的第一個變化將只運行ls。第二種變化將始終運行ls(因此,如果目錄不好,ls將運行在默認目錄中)。

+0

好的,我只是跟蹤路徑和最後輸出或類似的東西。 謝謝 – 2009-12-29 02:50:01

+0

如果命令本身使用'&&'和其他特殊的東西,這可能會導致問題。我認爲可能會更好地構建一個每行分開的shell腳本。儘管這會對簡單的東西起作用。 – paxdiablo 2009-12-29 02:52:31

2

您正在爲每個命令產生一個單獨的進程。將這些命令放入腳本並在一個進程中執行它

2

每個使用Runtime.exec的人都需要閱讀this