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

如何在Ninja中使用环境变量?能否弃用Shell脚本直接编写构建步骤?

Ninja直接执行命令与环境变量传递方案

直接在Ninja规则内编写命令

Ninja完全支持直接在rule的command字段中写入具体执行命令,无需依赖外部Shell脚本。你可以把原Shell脚本里的逻辑直接迁移到Ninja规则中。

举个例子,如果原init.sh内容是terraform init,对应的Ninja规则可以写成:

rule init
  command = terraform init

环境变量传递的三种实现方式

1. 规则内直接指定

在command开头直接设置环境变量,格式为VAR=值 执行命令:

rule plan
  command = AWS_REGION=us-east-1 terraform plan -out=tfplan

2. 全局定义共享变量

如果多个规则需要复用相同环境变量,可以在Ninja文件开头定义全局env变量,后续规则直接引用:

env AWS_REGION = us-east-1
env TF_VAR_project = my-demo-project

rule init
  command = terraform init
rule plan
  command = terraform plan -out=tfplan
rule apply
  command = terraform apply tfplan

3. 继承系统环境变量

Ninja默认会继承当前Shell的环境变量,若需明确引用系统环境变量,使用$env.变量名的格式:

rule plan
  command = terraform plan -var region=$env.AWS_REGION -out=tfplan

完整修改后的Ninja示例

假设原Shell脚本是执行Terraform的初始化、计划、部署操作,修改后的Ninja文件如下:

# 可选:全局环境变量定义
env AWS_REGION = us-east-1
env TF_VAR_environment = development

rule init
  command = terraform init

rule plan
  command = terraform plan -var region=$AWS_REGION -out=tfplan

rule apply
  command = terraform apply tfplan

build init: init
build plan: plan
build apply: apply

default plan

额外提示

  • 命令中包含空格、特殊字符时,用引号包裹,比如:command = "echo 'Hello Ninja'"
  • 复杂多行命令可以用\换行,Ninja会自动拼接执行:
    rule multi_step
      command = echo "Starting task..." && \
                mkdir -p ./build/output && \
                cp ./src/*.txt ./build/output/
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.02 01:05:34