Java Unix Shell 更改目录

标签 java shell unix directory

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

我看了一下this运气不好。

这是我正在使用的代码片段。

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

关于Java Unix Shell 更改目录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19350830/

相关文章:

shell - Crontab,预定的工作,在假期

android - 运行与终端分离的 AVD 模拟器

bash - 如果找不到匹配项,则通过 grep 返回新行

java - AIX - 无法创建 VM 线程。系统资源不足

PHP Text Stream/Buffer 在脚本之间共享实时数据

c - 十进制转二进制 C

java - 编程新手 - 更有效的数字总和

java - 考虑以下用 Java 编写的程序。为什么这个输出**2 2**。我认为这应该是输出 **1 1**

java - 如果我的cacheResolver 发现没有缓存可以使用,我应该返回什么?

java - 使用 JsonItemReader 解析文件名并处理每条记录