0

我正在尝试在 Java 中使用 system exec 做一些事情

Runtime.getRuntime().exec(command);

令人惊讶的是,与路径、目录和文件相关的所有内容都无法正常工作

我不明白为什么,只是想知道有没有其他选择

4

3 回答 3

4

另一种方法是使用ProcessBuilder类,它有一个更干净的界面,但您的主要问题可能与操作系统如何处理命令行有关,并且 Java 没有太多可以帮助您解决的问题。

于 2012-06-27T09:25:10.450 回答
2

如上所述, cd 是一个内置的 shell。即它不是一个可执行文件。您可以使用以下方法确定:

$ which cd
cd: shell built-in command

因为它不是一个独立的可执行文件,Runtime.exec()所以不能用它做任何事情。

您最好编写一个 shell 脚本来执行特定于 shell 的操作(例如更改工作目录),然后简单地使用Runtime.exec(). 您可以在脚本中设置 PATH 变量等,让 Java 简单地执行您的脚本。

引起人们注意的一件事是您必须使用脚本的 stdout/stderr(即使您将其丢弃)。如果您没有正确执行此操作,您的进程可能会阻塞。有关更多详细信息,请参阅此 SO 答案

于 2012-06-27T09:37:21.087 回答
0

exec() 方法可以接受三个参数。第三个是您的子进程应用作其工作目录的目录。无论如何,这解决了您的“cd”问题。

于 2012-10-12T22:26:21.643 回答