
掌握 Just 命令运行器Justfile 备忘清单实战指南【免费下载链接】reference面向开发者的技术速查清单Cheat Sheets集合整理常见技术、工具与开发流程帮助快速查阅关键信息提高开发效率。项目地址: https://gitcode.com/GitHub_Trending/referen/referenceJustjust是一款以“保存并运行项目特有命令”为核心目标的命令运行器通过一个名为justfile的清单文件把零散、易忘的构建、测试、部署等命令整理成可复用的配方recipe。本文基于本仓库速查清单 docs/justfile.md 展开系统梳理配方的定义、参数、变量、依赖、条件表达式、环境变量注入与命令行用法并结合仓库的组织方式给出可直接照抄的示例帮助你从零上手并进阶掌握 Just把项目日常命令全部纳入同一份可读、可维护的清单。Just 是什么以及文件名与查找规则just提供一种保存和运行项目特有命令的便捷方式。与make类似但更贴近现代开发习惯它的目标是让团队每个人都用同一套命令入口工作例如统一执行just build、just test、just deploy。关于文件名与查找速查清单中有几点重要提示justfile文件名不区分大小写Justfile、JUSTFILE等写法均被识别justfile可以被隐藏命名为.justfile同样生效从子目录调用配方是允许的例如在~/app1/target目录下执行$ just buildJust 会向父目录逐级查找justfile。这些规则意味着你可以把justfile放在项目根目录然后在任意子目录内调用全局统一的命令入口。入门最简单的 justfile一个最小的justfile只有配方名、冒号和若干命令行#!/usr/bin/env just --justfile # hello 是配方(recipe)的名字 hello: echo Hello World!要点#开头的行是注释同时也作为配方的文档说明配合just --list展示配方体由缩进的命令行组成echo Hello World!会被 Just 原样交给 shell 执行首行 shebang#!/usr/bin/env just --justfile不是必需的但能让文件在部分场景下直接以 Just 解释器方式运行。带参数的配方配方可以接收参数参数默认是位置参数必须在配方名后的括号或空格中声明filter PATTERN: echo {{PATTERN}}普通参数filter PATTERN在配方体内用{{PATTERN}}插值引用带默认值的参数email addressmasterexample.com: echo {{address}}带表达式的参数默认值可以是表达式例如调用内置函数arch()test triple(arch() -unknown-unknown): ./test {{triple}}可变参数一个或多个前缀表示接受一个或多个值backup FILES: scp {{FILES}} meexample.com可变参数零个或多个*前缀表示接受零个或多个值适合把任意数量的标志透传给下游命令commit MESSAGE *FLAGS: git commit {{FLAGS}} -m {{MESSAGE}}调用方式对应为just filter *.rs、just email userexample.com、just backup a.txt b.txt、just commit fix bug --amend等。变量与子变量:用于定义变量变量之间可以互相引用形成“子变量”链version : 0.2.7 tardir : awesomesauce- version tarball : tardir .tar.gz test: echo {{version}}变量在配方体内同样通过{{version}}插值字符串可以用拼接因此tarball最终等于awesomesauce-0.2.7.tar.gz变量默认只在命令行覆盖使用--set指定$ just --set version 1.1.0--set是命令行覆盖变量的标准做法适合在不修改justfile的前提下临时变更版本号、环境名等参数。默认配方与默认配置Just 支持用default配方声明默认行为default: lint build test当default声明了依赖如lint build test时just不带任何参数会按顺序执行这些配方也可以让default只负责展示帮助信息把真正的工作交给用户选择default: just --list如果justfile中没有default配方则默认执行文件中定义的第一个配方。导出环境变量export可以把变量注入到配方命令的进程中export RUST_BACKTRACE : 1 test: # 如果堆栈崩溃将打印堆栈跟踪 cargo test上面的例子中RUST_BACKTRACE1会被导出使 Rust 程序崩溃时输出完整堆栈。导出的变量对justfile内所有配方生效。除了export配方参数也可以用$前缀直接映射为 shell 环境变量hello $name: echo $name此时参数name会以环境变量$name的形式出现在配方命令中而不是用{{name}}插值——适合需要把值传给子进程如env、脚本的场景。Backtick从命令评估结果中捕获输出反引号可以让变量、参数的值来自命令执行结果JAVA_HOME : jbang jdk home 11上面把jbang jdk home 11的输出赋给JAVA_HOMEBacktick 支持多行代码块stuff : foohello echo $foo world- 配方参数同样可以来自命令输出 bash done BRANCHgit rev-parse --abbrev-ref HEAD: git checkout master字符串内部也可以使用反引号例如统计行数sloc: echo wc -l *.c lines of codeBacktick 可以在字符串、变量、参数等任何位置工作。需要注意上述示例在速查清单中的多行反引号写法存在转义提示——原文注明“上面示例中\ 没有转义过来”即 Markdown 渲染时反引号需要转义实际编写justfile 时直接使用反引号即可。别名为常用配方起短名alias t : test alias c : check定义后just t等价于just testjust c等价于just check适合缩写高频命令。设置set指令set用于调整 Just 的全局行为set shell : [zsh, -cu]set shell指定执行配方命令的 shell 及参数默认通常是[sh, -cu]这里改为 zsh 并启用-c命令串与-u未定义变量报错set dotenv-load : true让 Just 自动加载项目根目录的.env文件set dotenv-load : true serv: echo $DATABASE_ADDRESS from .env启用后.env中的DATABASE_ADDRESS等键值会以环境变量形式注入配方set positional-arguments : true开启位置参数模式配方内可以直接使用$0、$1等 shell 位置参数set positional-arguments : true foo: echo $0 echo $1配方依赖之前、之后与周围配方可以声明依赖控制执行顺序与并行关系# 执行序列A- B- C- D b: a c db: a c d表示先执行a然后并行执行c与d全部完成后再执行b自身的命令体。表示串行空格分隔表示并行也可以在配方体内显式调用其他配方控制“中间”执行时机b: echo B start! just a echo B end!这样a被夹在B start!与B end!之间执行依赖还可以带参数表达式default: (build main) build target: echo Building {{target}}...default依赖build并传入字符串参数main相当于just build main最终输出Building main...。Just 内置函数justfile内置了一批函数可直接在参数默认值或配方体插值中使用hello name: echo {{os()}} echo {{uppercase(name)}}速查清单将函数分为以下类别系统信息如os()、arch()系统信息原文重复列出实为架构/平台相关函数集合Justfile 与 Justfile 目录相关如justfile()、justfile_directory()字符串操纵如uppercase()、lowercase()、replace()、trim()路径操纵如extension()、file_name()、parent_directory()。此外字符串拼接可以直接用运算符例如(key : value)。完整函数清单以 Just 官方文档为准本文速查只列出类别以便按图索骥。字符串双引号、单引号与多行字符串string-with-tab : \t string-with-newline : \n escapes : \t\n\r\\\双引号字符串支持转义\t、\n分别表示制表符与换行单引号字符串中\t\n\r\\\按字面量保留不会解释转义三引号字符串保留换行与缩进x : foo bar 该字符串评估结果为foo\nbar\n每行一个适合保存多行模板内容。命令修饰符静默、忽略错误、反转退出状态每条命令前可以加前缀修饰符hello: echo command will not be echoed - echo ignore none-zero exit status and continue hello2: echo command will not be echoed hello3: # 如果命令成功退出状态为0请仅退出 ! git branch | grep * master静默模式命令本身不回显只输出命令结果放在配方名前则整个配方都不回显-忽略该命令的非零退出状态即使失败也继续执行后续命令!反转命令退出状态shell 特性git branch | grep * master在master分支上成功返回 0 时配方反而以非零退出可用来实现“匹配即失败”的守卫逻辑。条件表达式、循环与 while# 正则表达匹配 fo : if hi ~ h. { match } else { mismatch } test: if true; then echo True!; fi for file in ls .; do echo $file; done while server-is-dead; do ping -c 1 server; done foo bar: echo {{ if bar bar { hello } else { bye } }}变量赋值支持条件表达式~是正则匹配运算符hi ~ h.匹配成功则值为match否则为mismatch配方体内可以直接写 shell 的if、for、while循环因为它们本来就由 shell 执行插值表达式也支持内联条件{{ if bar bar { hello } else { bye } }}根据参数值输出不同字符串。Just 命令行使用配方写好后命令行操作如下# 运行配方(recipe) $ just hello param1 # 按字母顺序列出配方(recipe) $ just --list $ just --summary # 显示有关配方(recipe)的完整信息 just --show test # 选择以交互方式运行的配方(recipe) $ just --choose # shell 完成 just --completions zshjust hello param1执行配方并传参just --list按字母顺序列出全部配方及其注释--summary只输出配方名just --show test显示test配方的完整定义含命令体just --choose交互式选择要运行的配方just --completions zsh生成 shell 补全脚本bash、fish、powershell、zsh 等均可生成配合.zshrc加载即可获得命令补全。使用其他语言编写配方配方命令体默认由set shell指定的 shell 执行但也可以通过 shebang 切换到任意语言解释器bash-test: #!/usr/bin/env bash set -euxo pipefail helloYo echo $hello from bash!在命令体中写下 shebang 后Just 会把整段命令交给对应解释器运行。set -euxo pipefail是 Bash 的经典严格模式-e出错即停、-u未定义变量报错、-x打印执行、-o pipefail管道中任一环节失败即失败适合在 CI 与脚本中保证健壮性。同样的技巧可扩展到 Python、Ruby、Node 等任何可用#!/usr/bin/env启动的解释器。私有配方以下划线开头test: _test-helper ./bin/test # omitted from just --list _test-helper: ./bin/super-secret-test-helper-stuff名字以_开头的配方是私有的不会出现在just --list的列表中也不会被--summary、补全等机制暴露私有配方依然可以被其他配方依赖如上例test依赖_test-helper适合组织内部辅助步骤而不污染对外接口。使用注意执行模型与多行构造# 每个命令行都由一个新的 shell 执行 # 如果一个命令行执行失败just会退出 # 后面的命令行不会执行 change-working-dir: cd bar pwd # 多行构造 - 用斜线转义换行符 if true; then \ echo True!; \ fi理解 Just 的执行模型非常关键每行命令都在独立的新 shell 中执行因此cd bar不会影响后续行必须写成cd bar pwd才能在同一 shell 内完成切换与查看一旦某条命令执行失败非零退出Just 立即退出后续命令行不会执行除非该行带-前缀多行构造用反斜杠\转义换行符例如把多行if语句折叠进同一 shell 命令保证它们在同一个 shell 进程中运行。把全局 justfile 变成 shell 别名如果你维护了一个全局~/.justfile可以在 shell 配置中批量生成别名把配方直接当作命令使用for recipe in just -f ~/.justfile --summary; do alias $recipejust -f ~/.justfile -d. $recipe donejust -f ~/.justfile --summary列出全局清单中的全部配方名为每个配方生成形如alias 配方名just -f ~/.justfile -d. 配方名的别名-d.表示在目录$PWD下运行配方保证配方内部的相对路径正确把这段脚本放入.bashrc/.zshrc即可在当前 shell 中直接敲配方名执行无需每次输入just。IDE 集成Just 官方及社区提供了主流编辑器的支持VS Code安装just相关扩展即可获得justfile的语法高亮、配方跳转与命令运行支持JetBrains 系 IDE安装just插件后可获得语法高亮与配方运行支持。安装入口均可通过各自插件市场的just关键字检索到。若速查清单页面对应的导航与格式说明可参考本仓库的 docs/quickreference.md 与 CONTRIBUTING.md。关联阅读与仓库定位本文速查文档位于仓库的 docs/justfile.md属于本项目“面向开发者的技术速查清单”系列中“命令”分类下的一页见 README.md 中## 命令分组的Justfile卡片对应图标为 assets/just.svg。如果你熟悉make可对照阅读 docs/make.md 中关于目标、隐式规则、-n/--just-print等行为的描述快速比较两套命令运行器的异同make面向“文件依赖与增量构建”just面向“保存与运行项目命令”just的配方即命令序列语法更接近脚本支持参数、变量、别名、环境变量注入等现代开发习惯两者都强调用一份清单统一团队的命令入口降低“命令记在文档里但没人执行”的成本。上手建议从“入门最简单的 justfile”开始写第一个hello配方逐步加入参数、变量、依赖与环境变量最后用just --list检查清单可读性再借助--completions zsh开启补全即可在日常开发中稳定复用这套命令入口。【免费下载链接】reference面向开发者的技术速查清单Cheat Sheets集合整理常见技术、工具与开发流程帮助快速查阅关键信息提高开发效率。项目地址: https://gitcode.com/GitHub_Trending/referen/reference创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考