当前位置: 首页 > 面试题库 >

Java的ProcessBuilder在哪里执行命令?

云宝
2023-03-14
问题内容

当我使用执行命令时ProcessBuilder,它如何知道在哪里寻找该命令?使用此技巧,我将PATH变量(通过检查进行了验证processBuilder.environment()修改为错误(空,工作目录等),但ProcessBuilder仍然可以执行sort,echo,bash等。它是怎么做到的?

注意:我特定的开发环境是OSX,但是此代码也将在Red Hat Enterprise Linux上运行。


问题答案:

该文件说

一个命令,一个字符串列表,表示要调用的外部程序文件及其参数(如果有)。哪个字符串列表表示有效的操作系统命令取决于系统。[…]

从本质上讲,这意味着它在哪里寻找要执行的程序,取决于您正在运行的特定系统和JVM。

我找不到JVM /系统行为的完整矩阵,但据推测它的行为类似于系统的流行shell(bash对于*
nix和cmdWindows),即它PATH从左到右搜索环境变量中的目录并执行找到的第一个可执行文件。



 类似资料:
  • 堆栈跟踪: cat://opt/mapr/zookeeper/zookeeeperversion:没有这样的文件或目录16/10/25 07:41:12信息Sqoop.Sqoop:运行Sqoop版本:1.4.6-mapr-1609 16/10/25 07:41:12警告工具。basesqooptool:在命令行设置密码不安全。考虑改用-p。16/10/25 07:41:13错误tool.bases

  • 我试图使用Java的类来执行包含管道的命令。例如: 然而,我得到了一个错误: 然后: 尽管该命令在命令行中运行得很好,但我无法让执行将其输出重定向到另一个的命令。 有没有办法做到这一点?

  • 我正在尝试使用Java ProcessBuilder获得以下ImageMagick命令: 文件路径(源映像、掩码映像和目标映像)是可配置的。如果我在PowerShell或Windwos Cmd中输入命令,它将按预期工作。当我试图通过Java ProcessBuilder执行相同的命令时,它失败了。 这是我最后的代码: 这是来自流程构建器的ourput: 似乎这些命令的解释方式不正确 我尝试过以下几

  • I使用Processbuilder如下所示: 在方法中,我设置要执行的linux命令,如下所示: 我可以从终端执行相同的命令。

  • 我正在尝试使用ProcessBuild运行cmd语句。 但是,我只能打开cmd。exe 那么如何编写此语句通过java运行cmd命令??我得到了错误,因为语句由"*"组成。如何编辑ProcessBuilder以便我可以运行语句?非常感谢

  • 线程“main”java.io.ioException中出现异常:无法运行程序“java” 但是当我从终端上运行任何java命令时,它们都工作得很好。 我发现的另一件事是,当我在终端中运行命令:并使用ProcessBuilder()时,它们会显示不同的输出。即ProcessBuilder命令中不显示jdk/bin的路径。 我如何解决这个问题?