的Java:调用Runtime.getRuntime()EXEC(CMD)错误与某些命令,但与其他命令
作品这是我的代码:的Java:调用Runtime.getRuntime()EXEC(CMD)错误与某些命令,但与其他命令
public static void main(String[] args) throws Exception {
String[] cmd = {"which", "hive"};
Process proc = Runtime.getRuntime().exec(cmd);
BufferedReader reader = new BufferedReader(
new InputStreamReader(proc.getInputStream()));
String line = "";
while((line = reader.readLine()) != null) {
System.out.print(line + "\n");
}
proc.waitFor();
}
在我的终端:
which hive:/home/as/hive/bin/hive
which gcc:/usr/bin/gcc
但是,当我运行这个Java代码:
which hive:no result
which gcc:/usr/bin/gcc
我已经添加到$HIVE_HOME
~/.bashrc
(我使用Ubuntu 14.04 64位和JA VA 8),那么我现在应该做什么?
命令which
查找环境变量PATH
中指定的所有目录。在Linux上,目录由冒号(:
)分隔,在Windows中以分号(;
)分隔。
你可以查阅一下PATH
被传递给which
通过做
System.out.println(System.getenv("PATH"));
而且你可以通过不同的路径Runtime.exec
:
String[] env = { "PATH=/home/as/hive/bin" };
Process proc = Runtime.getRuntime().exec(cmd, env);
如果你这样做,它which
会发现hive
命令(但它不会再找到gcc
,除非您还将/usr/bin
添加到PATH
,如PATH=/home/as/hive/bin:/usr/bin
)
as @ ubuntu:〜$ echo $ PATH;/usr/local/sbin:/ usr/local/sbin:/ usr/bin/sbin:/ usr/bin:/ sbin:/ bin:/ usr/games:/ usr/local/sbin: /home/as/jdk1.8.0_25/bin:/home/as/hadoop/bin:/home/as/hadoop/sbin:/home/as/bin:/home/as/jdk1.8.0_25/bin:/家用/为/ sqoop-1.4.5.bin__hadoop-2.0。4-alpha/bin:/ home/as/hbase/bin:/ home/as/hive/bin – voxter 2014-12-15 13:37:16
in java: System.out.println(System.getenv()。get(“PATH”)); 结果: /usr/local/sbin:/ usr/local/bin:/ usr/sbin:/ usr/bin:/ sbin:/ bin:/ usr/games:/ usr/local/games:/ home/as /bin:/home/as/jdk1.8.0_25/bin – voxter 2014-12-15 13:38:07
为什么我们有这个不同点?我瘦了这是我们的问题 – voxter 2014-12-15 13:38:51
在我的终端中:
as @ ubuntu:〜$ echo $ PATH;
/usr/local/sbin:/ usr/local/bin:/ usr/sbin:/ usr/bin:/ sbin:/ bin:/ usr/games:/ usr/local/games:/ home/as/bin :/home/as/jdk1.8.0_25/bin:/家庭/为/ Hadoop的/ bin中:/家庭/为/ Hadoop的/ sbin目录:/家庭/中的/ bin:/home/as/jdk1.8.0_25/bin: /home/as/sqoop-1.4.5.bin__hadoop-2.0.4-alpha/bin:/home/as/hbase/bin:/home/as/hive/bin
但在java中:
System.out。的println(System.getenv()获得( “PATH”));
结果:
在/ usr/local/sbin中:在/ usr/local/bin目录:/ usr/sbin目录:在/ usr/bin中:/ sbin目录:/ bin中:在/ usr /游戏:/ usr/local/games:/ home/as/bin:/home/as/jdk1.8.0_25/bin
所以这是我的账户$ PATH根$ PATH?
那么如何解决它?
如果你想看到的错误,我建议你阅读错误流。或者,您可以将两个流合并为一个,以便于阅读。 – 2014-12-13 13:48:41
你如何运行Java?当您运行Java时,您确定配置单元在您的PATH中吗?尝试打印'System.out.println(System.getenv()。get(“PATH”));' – 2014-12-13 13:52:16