3 个版本
0.1.3 | 2019 年 4 月 17 日 |
---|---|
0.1.2 | 2019 年 4 月 12 日 |
0.1.1 |
|
0.1.0 | 2019 年 4 月 11 日 |
#94 in macOS 和 iOS APIs
21KB
361 行
Aqua Env - 可持续环境
Aquaenv 使得 shell 环境对 Aqua (macOS GUI) 应用程序可用。
Aquaenv 是一个 macOS (仅限) 工具,它使得 shell 环境对 Aqua (macOS GUI) 应用程序可用。它被设计成作为每个用户的持久 LaunchAgent
守护程序运行。环境变量可以被列入白名单(即标记为导出),并且可以监视文件以刷新导出的环境变量(例如,当 shell 配置文件更改时重新导出环境变量)。
Aquaenv 没有用户界面。配置使用标准的 defaults 命令行工具执行。见下文。
内部机制
当 Aquaenv
启动时,它会调用当前用户的登录 shell(自动检测)以确定要导出的变量,通过配置的白名单过滤变量,并通过 launchctl setenv VARIABLE VALUE
将剩余的变量导出到 launchd
,这个过程称为导出 shell 环境变量。
作为一个选项,可以监视配置文件,根据配置更改重新导出 shell 环境变量(例如,编辑 shell 的配置文件)。
Aquaenv
的配置文件会自动监视。
安装
需要 Rust。
cargo install aquaenv
aquaenv -i
defaults write org.antbear.aquaenv whitelist -array-add \
MY_IMPORTANT_VAR1 \
MY_IMPORTANT_VAR2
有关 Nix,请参阅:https://github.com/bwolf/aquaenv.nix。
可以通过 aquaenv -i
将 Aquaenv
配置为作为 LaunchAgent
自动启动。配置文件将创建在 ~/Library/Preferences/org.antbear.aquaenv.plist
,并将指示 launchd
启动代理。
可以通过 aquaenv -u
反转安装(即卸载),该命令将卸载 plist
并将其删除。
日志已启用并输出到文件 ~/Library/Logs/aquaenv.log
。日志文件的时戳以协调世界时(UTC)书写。
配置
第一次启动时会创建一个空的默认配置。它不包含白名单环境变量,也不包含要监视的文件。只有 SHELL_PATH
会被导出(shell 的原始 PATH
)。
Aquaenv
在域名 org.antbear.aquaenv
中配置。它支持以下配置键
- whitelist(字符串数组):从 shell 导出的环境变量。
- watch(字符串数组):监视配置变更的文件。
zsh
的示例配置
defaults write org.antbear.aquaenv whitelist -array \
XDG_CONFIG_HOME \
XDG_CACHE_HOME \
XDG_DATA_HOME \
CARGO_HOME \
RUSTUP_HOME
defaults write org.antbear.aquaenv watch -array \
$HOME/.zshenv \
$HOME/.zshrc
为了完整性,上述配置通过以下 XML 配置实现,如下通过 plutil
显示
plutil -convert xml1 -o /dev/stdout \
~/Library/Preferences/org.antbear.aquaenv.plist
输出:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN"
"http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>watch</key>
<array>
<string>/Users/user/.zshenv</string>
<string>/Users/user/.zshrc</string>
</array>
<key>whitelist</key>
<array>
<string>XDG_CONFIG_HOME</string>
<string>XDG_CACHE_HOME</string>
<string>XDG_DATA_HOME</string>
<string>CARGO_HOME</string>
<string>RUSTUP_HOME</string>
</array>
</dict>
</plist>
限制
Launchd
不支持设置 PATH
,因为 launchd
忽略通过 launchctl setenv PATH foo:bar
设置的 PATH。作为附加功能,Aquaenv
将 PATH
作为变量 SHELL_PATH
导出,这可以通过自定义配置在如 GNU Emacs 这样的配置应用程序中使用。
许可证
Aquaenv 根据以下许可证之一进行许可
- Apache License,版本 2.0 (LICENSE-APACHE / https://apache.ac.cn/licenses/LICENSE-2.0)
或
- MIT 许可证 (LICENSE-MIT / http://opensource.org/licenses/MIT).
依赖
~4–15MB
~163K SLoC