2009-12-29 137 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