这是我的代码:
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位和Java 8),那么我现在应该怎么做?
答案 0 :(得分:1)
命令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
)
答案 1 :(得分:0)
在我的终端中:
as @ ubuntu:〜$ echo $ PATH;
在/ usr / local / sbin中:在/ usr / local / bin目录:/ usr / sbin目录:在/ usr / bin中:/ sbin目录:/ bin中:在/ usr /游戏:在/ usr /本地/游戏:/首页/中的/ bin:/家用/为/ jdk1.8.0_25 / bin中:/家庭/为/ Hadoop的/ bin中:/家庭/为/ Hadoop的/ sbin目录:/家庭/中的/ bin:/home/as/jdk1.8.0_25/bin:/家/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 /本地/游戏:/首页/中的/ bin:/家用/为/ jdk1.8.0_25 / bin中
所以这是我的帐户的$ PATH和root的$ PATH? 那怎么解决呢?