【发布时间】: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 -v 和Runtime.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)工作!将此作为答案,以便我可以标记它