我正在尝试使用Java中的system exec做一些事情
Runtime.getRuntime().exec(command);
令人惊讶的是,与路径,目录和文件相关的所有内容都无法正常运行
我不明白为什么,只是想知道有没有替代?
答案 0 :(得分:4)
另一种方法是使用ProcessBuilder类,它有一个更清晰的接口,但你的主要问题可能与操作系统如何处理命令行有关,并且没有太多的Java可以帮助你那个。
答案 1 :(得分:2)
如上所述,cd是内置的shell。即它不是可执行文件。您可以使用以下方法确定:
$ which cd
cd: shell built-in command
由于它不是独立的可执行文件,Runtime.exec()
将无法对其执行任何操作。
您可能最好编写一个shell脚本来执行特定于shell的操作(例如,更改工作目录),然后使用Runtime.exec()
执行该shell脚本。您可以在脚本中设置PATH变量等,并让Java只执行您的脚本。
吸引人们的一件事是你必须使用脚本的stdout / stderr(即使你扔掉它)。如果您没有正确地执行此操作,您的过程可能会阻止。有关详细信息,请参阅this SO answer。
答案 2 :(得分:0)
exec()方法可以带三个参数。第三个是您的子进程应该用作其工作目录的目录。无论如何,这解决了你的“cd”问题。