【问题标题】:Running Shell scripts through java通过 java 运行 Shell 脚本
【发布时间】:2009-12-29 02:43:07
【问题描述】:

所以我有一个 java 类,它接受单个命令并通过 Runtime 和 Process 对象将它们放入 shell。我的问题是我可以运行如下命令:

$ls /users/me/documents

它会起作用,但是

$cd /users/me/documents
$ls

仍然列出根目录。显然 Process 和 runtime 对象不会跟踪它的位置。有什么方法可以捕获终端对象,还是我必须手动跟踪当前目录?

【问题讨论】:

    标签: java bash shell


    【解决方案1】:

    每个 shell 脚本都会重新开始。您需要将所有命令串在一起:

    cd /usr/me/documents && ls
    
    cd /usr/me/documents; ls
    

    第一个变体只有在 cd 成功时才会运行 ls(所以如果目录坏了,ls 将不会运行)。第二种变体将始终运行 ls(因此,如果目录错误,则 ls 将在默认目录中运行)。

    【讨论】:

    • 好的,所以我只跟踪路径和最后输出或类似的东西。谢谢
    • 如果命令本身使用 '&&' 和其他特殊的东西,这可能会导致问题。我认为构建一个每行分开的shell脚本可能会更好。不过,这适用于简单的东西。
    【解决方案2】:

    您正在为每个命令生成一个单独的进程。将命令放入脚本中,并在一个进程中执行

    【讨论】:

      【解决方案3】:

      使用 Runtime.exec 的每个人都需要阅读this

      【讨论】:

        最近更新 更多