FEATURED · 精选文章

如何用 $.prefix 向每条 zx 命令注入环境变量与 shell profile?

发布时间 / 2026/9/10 16:59:07
来源 / 创域科博编辑部
栏目 / 资讯中心
如何用 $.prefix 向每条 zx 命令注入环境变量与 shell profile? 如何用 $.prefix 向每条 zx 命令注入环境变量与 shell profile【免费下载链接】zxA tool for writing better scripts项目地址: https://gitcode.com/GitHub_Trending/zx/zx在 zx 脚本里用$执行命令时每个命令都运行在 Node 派生的非交互式 shell 中不会加载~/.bashrc里的 alias、bash 函数也看不到 nvm 这类按需注入的环境FAQ 明确说明默认child_process不包含 aliases 和 bash functions。如果希望脚本里的每一条命令都能使用某个环境变量、某个 profile 或某个特定版本的 Node逐个命令改写很麻烦。zx 提供了$.prefix配置项它指定一段拼接到每条被执行命令开头的命令串是完成这一场景的官方入口。$.prefix的行为与默认值$.prefix的含义见 docs/configuration.md指定将被前缀到所有被运行命令的头部Specifies the command that will be prefixed to all commands run默认值是set -euo pipefail;面向 bash也可以在 CLI 上通过--prefixset -e;覆盖。$返回的ProcessPromise提供fullCmd属性即prefix cmd postfix拼出来的完整命令可用于核对注入结果见 docs/process-promise.mdconst p $sleep 1 p.fullCmd // full command with prefix and postfix: set -euo pipefail;sleep 1上面这行注释是文档给出的示例结果展示了 prefix 如何拼进实际执行串。向每条命令注入环境变量两种文档支持的写法按需要选其一。写法一写入process.env。$.env默认就是process.envdocs/configuration.md因此脚本中先给process.env赋值之后所有$命令都会继承它。docs/faq.md 的 Passing env variables 示例process.env.FOO bar await $echo $FOO写法二在$.prefix中追加export指令。FAQ 的 Attaching a profile 展示了同一机制的通用形态——把需要的指令挂到$.prefix上$.prefix export NVM_DIR$HOME/.nvm; source $NVM_DIR/nvm.sh; await $nvm -v注意示例使用而非会整体替换掉默认的set -euo pipefail;则在默认值之后追加。按同样的模式你可以把任意export KEYvalue;指令拼进$.prefix效果是每条命令执行前都会先完成这次导出。附加 shell profile以加载 nvm 为例FAQ 给出的 profile 附加方式就是$.prefix的典型用法把初始化 profile 的export与source指令追加到 prefix随后依赖该 profile 的命令即可运行$.prefix export NVM_DIR$HOME/.nvm; source $NVM_DIR/nvm.sh; await $nvm -v由于每条$命令都会带上这段前缀profile 无需在每个命令前重复书写。只在一段逻辑内生效用within()限定作用域$.prefix是全局配置直接会影响脚本后续的所有命令。如果只想在一段逻辑里切换环境例如临时切到 Node 16docs/api.md 的within()可以创建一个新的异步上下文上下文结束后恢复原配置await $node --version // v20.2.0 const version await within(async () { $.prefix export NVM_DIR$HOME/.nvm; source $NVM_DIR/nvm.sh; nvm use 16; return $node --version }) echo(version) // v16.20.0文档中的v20.2.0与v16.20.0是示例输出实际值取决于你环境里安装的 Node 版本。不改脚本用 CLI 参数与环境变量注入不想修改脚本内容时可以用 CLI 参数docs/cli.mdzx --prefixecho foo; --postfix; echo bar script.mjs--prefix会覆盖$.prefix对脚本内所有$命令生效。同一文档还说明上述所有选项都可以通过对应的ZX_前缀环境变量设置文档示例ZX_VERBOSEtrue ZX_SHELL/bin/bash zx script.mjs因此 prefix 也可以按同样规则以环境变量形式传入例如在 CI 的env块中配置而不必修改命令行本身。验证注入是否生效文档给出两类核对手段看完整命令串读取p.fullCmddocs/process-promise.md确认你的前缀出现在cmd之前。开 verbose 观察执行把$.verbose设为true或用--verbosezx 会打印每条执行的命令及其输出docs/configuration.md$.verbose true $.prefix export FOObar; const p $echo $FOO console.log(p.fullCmd) await p看依赖该环境的命令的输出例如 FAQ 中加载 nvm 后执行await $nvm -v能打印版本号即说明 profile 已随每条命令注入。边界与限制$.prefix作用于每条命令configuration.md 原文 all commands run注入的指令会在每次$调用时重复执行不要放入耗时操作。命令尾部对应的配置是$.postfixLike a$.prefix, but for the end of the commandPowerShell 场景的官方示例是$.postfix ; exit $LastExitCode。PowerShell 预设docs/api.md 的usePowerShell()会把$.prefix置空、$.postfix置为上述值此时把初始化指令加到 prefix 同样可行但引号语义不同需配合quotePowerShell的默认行为。默认的set -euo pipefail;是 bash 风格选项串若你显式用整体替换 prefix等于放弃了这组 shell 选项替换前应有明确意图。更多配置项$.env、$.shell、$.quiet等可继续在 docs/configuration.md 与 docs/api.md 中查阅$.prefix与fullCmd的实现见 src/core.ts。【免费下载链接】zxA tool for writing better scripts项目地址: https://gitcode.com/GitHub_Trending/zx/zx创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
RELATED — 相关阅读

相关资讯

LATEST — 最新资讯

最新发布

TODAY — 本日精选

新闻

WEEKLY — 本周精选

新闻

MONTHLY — 本月精选

新闻