所以我有一个java类,它将单独的命令通过运行时和进程对象放到shell中。我的问题是,我可以运行像这样的命令:通过java运行Shell脚本
$ls /users/me/documents
,它会工作,但
$cd /users/me/documents
$ls
还列出了根。显然,进程和运行时对象不会跟踪它在哪里。有什么方法来捕获终端对象,还是我必须手动跟踪当前目录?
所以我有一个java类,它将单独的命令通过运行时和进程对象放到shell中。我的问题是,我可以运行像这样的命令:通过java运行Shell脚本
$ls /users/me/documents
,它会工作,但
$cd /users/me/documents
$ls
还列出了根。显然,进程和运行时对象不会跟踪它在哪里。有什么方法来捕获终端对象,还是我必须手动跟踪当前目录?
每个shell脚本都将重新开始。您需要将字符串的所有您的命令在一起:
cd /usr/me/documents && ls
cd /usr/me/documents; ls
如果CD是成功的(所以如果目录是坏,LS将无法运行)的第一个变化将只运行ls。第二种变化将始终运行ls(因此,如果目录不好,ls将运行在默认目录中)。
您正在为每个命令产生一个单独的进程。将这些命令放入脚本并在一个进程中执行它
每个使用Runtime.exec的人都需要阅读this。
好的,我只是跟踪路径和最后输出或类似的东西。 谢谢 – 2009-12-29 02:50:01
如果命令本身使用'&&'和其他特殊的东西,这可能会导致问题。我认为可能会更好地构建一个每行分开的shell脚本。尽管这会对简单的东西起作用。 – paxdiablo 2009-12-29 02:52:31