javaunixshell更改目录
我正在尝试用Java创建一个Unix shell。除了“cd”change directory命令之外,一切都很好。每当我试图更改目录时,它都会保持在同一个目录中 我看了一眼,运气不好 下面是我正在使用的代码片段javaunixshell更改目录,java,shell,unix,directory,Java,Shell,Unix,Directory,我正在尝试用Java创建一个Unix shell。除了“cd”change directory命令之外,一切都很好。每当我试图更改目录时,它都会保持在同一个目录中 我看了一眼,运气不好 下面是我正在使用的代码片段 try { Process p = null; File directory = new File("/Users/myName"); if(inputList.get(0).equals("cd") { System.setProper
try
{
Process p = null;
File directory = new File("/Users/myName");
if(inputList.get(0).equals("cd")
{
System.setProperty("user.dir", "Users/myName");
System.out.println(System.getProperty("user.dir"));
ProcessBuilder pb = new ProcessBuilder("cd");
pb.directory(directory);
System.out.println(pb.directory);
p = pb.start();
}
}
请注意,在打印时,getProperty命令会返回正确的目录地址。
还要注意,在打印pb.directory()时,它还打印出正确的目录地址。
但是,在接下来执行“pwd”命令时,它显示我在项目的目录中。在Unix中,当前工作目录是特定进程的属性。默认情况下,Java不提供任何操作方法(“user.dir”属性提供类似但不完全相同的功能,即它是解析相对路径名的位置,但实际上并不控制Unix工作目录)。您可以更改子流程的当前目录—这是您在发布的代码中使用ProcessBuilder.directory()所做的—但在子流程终止后,将不会记住任何此类更改 当您试图执行“cd”命令时,执行该命令是毫无意义的——该命令将更改其工作目录,然后立即终止,忘记所做的更改 因此,您需要做的是在变量中跟踪该目录,并将其用作后续执行的每个命令的目录。在代码中,我希望看到如下内容:
if(inputList.get(0).equals("cd")
{
File newDirectory = new File(inputList.get(1));
if (!newDirectory.exists() || !newDirectory.isDirectory())
/* handle error here */
....
else
/* otherwise change is successful */
directory = newDirectory
/* no need to actually start a process here */
}
// ...
else
{
ProcessBuilder pb = new ProcessBuilder(inputList.get(0));
pb.directory(directory);
// ....
p = pb.start();
}
谢谢你的澄清!