【问题标题】:`hash` in script doesn't run properly with Process脚本中的“哈希”无法与 Process 正常运行
【发布时间】:2017-07-28 08:45:49
【问题描述】:

我有一个包含以下行的脚本:

hash git >/dev/null 2>&1 || { echo >&2 "Git is not installed"; exit 2; }

断言git 已安装,如果没有,则退出。我想用 Java 运行它:

new ProcessBuilder("script.sh", "0").start().waitFor()

该进程总是退出,因为找不到git,即使它在 bash 中运行得非常好(因为它已安装)。

编辑:与command -vRuntime.getRuntime().exec(..) 相同(所有组合)

【问题讨论】:

  • 我不熟悉 java 调用系统子进程的方式,但你确定 PATH 变量来源于新创建的上下文吗?也许试试bash script.sh
  • @Aserre 我也试过:new ProcessBuilder("/bin/bash", ...)。即使我在Process.getR().exec(c, env) 中设置了PATH,它也不起作用。我认为问题出在hash,因为sleep 100 之前运行良好,之后则不行。
  • @Aserre 一个完整的PATH(如echo $PATH)工作!将此作为答案,以便我可以标记它

标签: java bash process


【解决方案1】:

您的$PATH 变量似乎不是来自ProcessBuilder 方法创建的新上下文。

由于您的脚本执行良好且不会引发错误,即使它显示出意外结果,似乎 hash 已被识别,但您的调用不知道在哪里查找 git 可执行文件

尝试使用函数的完整路径重写您的脚本,以便能够找到可执行文件,即/usr/bin/git

【讨论】:

  • 获取echo $PATH的输出并在Runtime.getRuntime().exec(command, new String[] { <echo> })中使用。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-04-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多