环境: mac
前提条件:我已配置'adb'
bash_profile
的完整路径。当我尝试在终端中输入'adb'
时,它正在运行。
但是,我尝试从java执行'adb'
命令,'adb'
无效,相反,我需要传递完整的adb路径才能使其正常工作。
我想这可能与bash_profile
设置有关,有谁知道这个问题的确切原因?
答案 0 :(得分:1)
Runtime.getRuntime().exec()
运行/bin/sh -c <command>
。如果这是或指向系统上的bash shell:非交互式bash不会读取.bash_profile
,除非明确指出(--login
)这样做。
当Bash作为交互式登录shell或作为具有--login选项的非交互式shell调用时,它首先从文件/ etc / profile中读取并执行命令(如果该文件存在)。在读取该文件之后,它按顺序查找〜/ .bash_profile,〜/ .bash_login和〜/ .profile,并从存在且可读的第一个命令中读取并执行命令。启动shell以禁止此行为时,可以使用--noprofile选项。
这有点令人费解,但非交互式非登录bash实例不会读取配置文件。
您的路径设置无法通过子shell获取(实际上/bin/sh
甚至可能根本不是bash 。
如果需要,可以通过添加appropriate entry to to /etc/paths.d
将系统范围的路径添加到adb
。