[英]run java exec command, always need full absolute path to the application?
环境: mac
前提条件:我已经为我的bash_profile
配置了'adb'
完整路径。 当我在终端中尝试输入'adb'
时,它正在工作。
但是,我尝试从Java执行'adb'
命令, 'adb'
无法正常工作,相反,我需要传递完整的adb路径才能使其正常工作。
我想这可能与bash_profile
设置有关,有人知道此问题的确切原因吗?
Runtime.getRuntime().exec()
运行/bin/sh -c <command>
。 如果这是您的系统上的bash shell或指向该bash shell:非交互式bash不会读取.bash_profile
除非明确要求( --login
)这样做。
从文档中 :
当Bash作为交互式登录shell或使用--login选项作为非交互式shell调用时,它首先从文件/ etc / profile中读取并执行命令(如果该文件存在)。 读取该文件后,它将按该顺序查找〜/ .bash_profile,〜/ .bash_login和〜/ .profile,并从存在的且可读的第一个命令中读取并执行命令。 启动外壳程序时,可以使用--noprofile选项禁止此行为。
这有点令人费解,但非交互式,非登录bash实例不会读取配置文件。
子外壳程序(实际上是/bin/sh
, 甚至根本不是bash )都不会占用您的路径设置。
如果需要,可以通过在/etc/paths.d
添加适当的条目来将路径添加到adb
系统范围/etc/paths.d
。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.