Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/389.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/shell/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
javaunixshell更改目录_Java_Shell_Unix_Directory - Fatal编程技术网

javaunixshell更改目录

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

我正在尝试用Java创建一个Unix shell。除了“cd”change directory命令之外,一切都很好。每当我试图更改目录时,它都会保持在同一个目录中

我看了一眼,运气不好

下面是我正在使用的代码片段

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();
}

谢谢你的澄清!