2016-03-03 22 views
1

环境:mac运行java exec命令,总是需要完整的绝对路径给应用程序?

前提条件:我已经配置到我的bash_profile'adb'完整路径。当我在终端上尝试输入'adb'时,它正在工作。

但是,我试图从java执行'adb'命令,'adb'不工作,而是我需要传递完整的adb路径才能使其工作。

我想这可能与bash_profile设置有关,任何人都知道这个问题的确切原因?

+2

*“我试图从java执行'adb'命令”* - 如何? – MadProgrammer

+0

相关代码在哪里? – f1sh

回答

1

Runtime.getRuntime().exec()运行/bin/sh -c <command>。如果这是或指向系统上的bash shell:除非明确指出(--login),否则非交互式bash不会读取.bash_profile

documentation

当bash被调用以交互登录壳,或作为非交互式壳与--login选项,它首先读取并从文件中执行命令的/ etc /配置文件,如果该文件存在。读取该文件后,它会按照该顺序查找〜/ .bash_profile,〜/ .bash_login和〜/ .profile,并从第一个存在且可读的命令读取和执行命令。当shell开始禁止这种行为时,可以使用--noprofile选项。

这有点复杂,但非交互式的非登录bash实例不读取配置文件。

您的路径设置不会被子shell获取(实际上/bin/sh其中甚至可能根本就不是bash)

如果需要,可以通过添加appropriate entry to to /etc/paths.d将系统范围的路径添加到adb