【问题标题】:run java exec command, always need full absolute path to the application?运行 java exec 命令,总是需要应用程序的完整绝对路径?
【发布时间】:2016-06-16 10:49:30
【问题描述】:

环境: mac

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

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

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

【问题讨论】:

  • “我试图从 java 执行 'adb' 命令” - 怎么样?
  • 相关代码在哪里?

标签: java macos bash


【解决方案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 实例不读取配置文件。

您的路径设置不会被 subshel​​l 获取(实际上是 /bin/sh甚至可能根本不是 bash)。

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-07-12
    • 1970-01-01
    • 1970-01-01
    • 2021-02-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多