gpt4 book ai didi

java - Runtime.getRuntime().exec() 不执行某些命令

转载 作者:太空宇宙 更新时间:2023-11-04 03:39:43 30 4
gpt4 key购买 nike

我是java初学者,有一些问题。我读过有关此主题的几个主题,但没有一个对我有用。这是我的代码:

try 
{

Console console = System.console();

String command;

while(true)
{
command = console.readLine("Enter input:");
Process proc = Runtime.getRuntime().exec(command);

// Read the output

BufferedReader reader =
new BufferedReader(new InputStreamReader(proc.getInputStream()));

String line = "";
while((line = reader.readLine()) != null) {
System.out.print(line + "\n");
}

proc.waitFor();
}



}
catch(Exception e) {}

所以我正在尝试制作一个java程序并在其中运行终端命令(我使用的是linux)。该程序适用于“ls”“ps ef”等命令,但当我输入“cd”时它不起作用。我知道 cd 会产生不同的过程,应该这样使用:“Runtime.exec(String command, String[] envp, File dir)”。我的问题是:
如何让我的程序运行各种终端命令?抱歉,如果问题听起来很愚蠢。谢谢。

最佳答案

cd 命令是 shell 内置命令。当您通过 exec(...) 运行命令时,没有 shell。事实上,如果您尝试在系统的任何 bin 目录中查找 cd 命令,您将找不到......因为它不可能作为常规命令实现。

如果您尝试使用 cd 来更改 JVM 本身的当前目录,那么这是行不通的,因为命令只能更改其自身的当前目录以及(此后)它自身启动的命令。它无法更改其父进程的当前目录。

如果您尝试使用 cd 更改后续命令的当前目录,这也不起作用。当命令完成时,您设置当前目录的上下文也结束。

事实上,更改使用 exec 运行的命令的目录的正确方法是通过 ProcessBuilder API 本身进行设置。

<小时/>

How to make my program run all kinds of terminal commands?

你不能。一些“终端命令”仅作为 shell 命令才有意义,这意味着您需要一个 shell。

我想,您可以考虑在 Java 代码中模拟所需的行为。这适用于 cd ...但其他命令可能更难处理。

(就其值(value)而言,可以用 Java 实现 POSIX 兼容 shell。这只是大量工作。)

关于java - Runtime.getRuntime().exec() 不执行某些命令,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30305144/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com