You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Mac终端环境变量可用但.sh脚本无法检测到的问题

解决macOS中Shell脚本无法读取ANDROID_HOME环境变量的问题

原因分析

  1. 非交互式Shell不加载用户配置文件:当你用sh ./script.sh或直接./script.sh(若脚本shebang为#!/bin/sh)执行脚本时,启动的是非交互式Shell,这类Shell不会自动加载.bash_profile、.zshrc、.zprofile这类仅针对交互式Shell的配置文件,导致终端能读到的环境变量在脚本中无法获取。
  2. sudo执行会重置环境变量:使用sudo运行脚本时,会以root身份启动进程,默认会重置大部分用户级环境变量,自然无法读取你配置的ANDROID_HOME。

可行解决方案

方案1:修改脚本Shebang指定使用zsh

在脚本的第一行添加zsh的Shebang:

#!/bin/zsh

给脚本添加执行权限(若未添加):

chmod +x script.sh

之后用./script.sh执行,脚本会以zsh运行并加载你的zsh配置文件,从而读取到ANDROID_HOME。

方案2:在脚本中手动加载配置文件

若不想修改Shebang,可在脚本开头主动source你的配置文件:

# 根据实际配置的文件选择,比如加载zprofile
source ~/.zprofile
# 若使用bash则加载bash_profile:source ~/.bash_profile

脚本执行时会主动加载环境变量配置,即可获取到ANDROID_HOME。

方案3:将环境变量配置到全局Shell文件

把ANDROID_HOME配置放到/etc/profile或/etc/zshrc这类全局配置文件中(需sudo编辑),这样所有Shell环境(包括非交互式)都能读取到变量:

sudo echo 'export ANDROID_HOME=/你的AndroidSDK实际路径' >> /etc/profile
sudo echo 'export PATH=$PATH:$ANDROID_HOME/tools:$ANDROID_HOME/platform-tools' >> /etc/profile

配置完成后重启终端或执行source /etc/profile,脚本即可正常读取变量。

方案4:执行脚本时手动传入环境变量

临时测试场景下,可直接在执行脚本时传入变量:

ANDROID_HOME=/你的AndroidSDK实际路径 ./script.sh

内容的提问来源于stack exchange,提问作者Isma Rekathakusuma

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.11 14:04:52