环境:mac
运行java exec命令,总是需要完整的绝对路径给应用程序?
前提条件:我已经配置到我的bash_profile
'adb'
完整路径。当我在终端上尝试输入'adb'
时,它正在工作。
但是,我试图从java执行'adb'
命令,'adb'
不工作,而是我需要传递完整的adb路径才能使其工作。
我想这可能与bash_profile
设置有关,任何人都知道这个问题的确切原因?
环境:mac
运行java exec命令,总是需要完整的绝对路径给应用程序?
前提条件:我已经配置到我的bash_profile
'adb'
完整路径。当我在终端上尝试输入'adb'
时,它正在工作。
但是,我试图从java执行'adb'
命令,'adb'
不工作,而是我需要传递完整的adb路径才能使其工作。
我想这可能与bash_profile
设置有关,任何人都知道这个问题的确切原因?
Runtime.getRuntime().exec()
运行/bin/sh -c <command>
。如果这是或指向系统上的bash shell:除非明确指出(--login
),否则非交互式bash不会读取.bash_profile
。
当bash被调用以交互登录壳,或作为非交互式壳与--login选项,它首先读取并从文件中执行命令的/ etc /配置文件,如果该文件存在。读取该文件后,它会按照该顺序查找〜/ .bash_profile,〜/ .bash_login和〜/ .profile,并从第一个存在且可读的命令读取和执行命令。当shell开始禁止这种行为时,可以使用--noprofile选项。
这有点复杂,但非交互式的非登录bash实例不读取配置文件。
您的路径设置不会被子shell获取(实际上/bin/sh
其中甚至可能根本就不是bash)。
如果需要,可以通过添加appropriate entry to to /etc/paths.d
将系统范围的路径添加到adb
。
*“我试图从java执行'adb'命令”* - 如何? – MadProgrammer
相关代码在哪里? – f1sh