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

时间:2016-03-03 08:15:02

标签: java macos bash

环境: mac

前提条件:我已配置'adb' bash_profile的完整路径。当我尝试在终端中输入'adb'时,它正在运行。

但是,我尝试从java执行'adb'命令,'adb'无效,相反,我需要传递完整的adb路径才能使其正常工作。

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

1 个答案:

答案 0 :(得分:1)

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

来自documentation

  

当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