diff --git a/README.md b/README.md index 61f2b76e0c0..7aae8ad8c72 100644 --- a/README.md +++ b/README.md @@ -143,6 +143,7 @@ Quick Reference [Netstat](./docs/netstat.md) [iptables](./docs/iptables.md) [jq](./docs/jq.md) +[Justfile](./docs/justfile.md) [Lsof](./docs/lsof.md) [Mitmproxy](./docs/mitmproxy.md) [Netcat](./docs/netcat.md) diff --git a/docs/justfile.md b/docs/justfile.md new file mode 100644 index 00000000000..a73e1d6b348 --- /dev/null +++ b/docs/justfile.md @@ -0,0 +1,283 @@ +Justfile 备忘清单 +=== + +[![Repo Dependents](https://badgen.net/github/dependents-repo/casey/just)](https://github.com/casey/just/network/dependents) +[![Github repo](https://badgen.net/badge/icon/Github?icon=github&label)](https://github.com/casey/just) + +[`just`](https://github.com/casey/just) 为您提供一种保存和运行项目特有命令的便捷方式 + +入门 +---- + +### 简单的 justfile + +```bash +#!/usr/bin/env just --justfile + +# hello 是配方(recipe)的名字 +hello: + echo "Hello World!" +``` + +### 带参数的配方 + + +```bash +filter PATTERN: + echo {{PATTERN}} + +# 带有默认值的 param +email address='master@example.com': + echo {{address}} + +# 带表达式的参数 +test triple=(arch() + "-unknown-unknown"): + ./test {{triple}} + +# 变量参数:“+”接受一个或多个值 +backup +FILES: + scp {{FILES}} me@example.com + +# 带*的可变参数:零个或多个值 +commit MESSAGE *FLAGS: + git commit {{FLAGS}} -m "{{MESSAGE}}" +``` + +### 变量和子变量 + +```bash +version := "0.2.7" +tardir := "awesomesauce-" + version +tarball := tardir + ".tar.gz" + +test: + echo {{version}} + +# 仅从命令行设置/覆盖变量 +$ just --set version 1.1.0 +``` + +### 默认配置 + +```bash +default: lint build test +# 显示帮助信息的默认配方 +default: + @just --list +# 如果没有默认配方,则默认第一个配方 +``` + +### 命令的环境变量 + +```bash +export RUST_BACKTRACE := "1" + +test: + # 如果堆栈崩溃,将打印堆栈跟踪 + cargo test +``` + +### backtick-从评估中捕获输出 + + +```bash +JAVA_HOME := `jbang jdk home 11` +# Backtick 代码块 +stuff := \``` + foo="hello" + echo $foo "world" +\``` + +done BRANCH=`git rev-parse --abbrev-ref HEAD`: + git checkout master + +sloc: + @echo "`wc -l *.c` lines of code" + +# Backtick 在任何地方工作:字符串/变量/参数 +``` + +注意: 上面示例中 \\` 没有转义过来 + +### 别名 + +```bash +alias t := test +alias c := check +``` + +### 带有命令 env 变量配置 + +```bash +# recipe 参数作为$符号的Env变量 +hello $name: + echo $name +``` + +### 设置 + +```bash +set shell := ["zsh", "-cu"] + +set dotenv-load := true +serv: + echo "$DATABASE_ADDRESS from .env" + +set positional-arguments := true +foo: + echo $0 + echo $1 +``` + +### 配置依赖性-之前、之后和周围 + +```bash +# 执行序列:A-> B-> C-> D +b: a && c d +# 执行配方(recipe)“A” +b: + echo 'B start!' + just a + echo 'B end!' +# 通过表达式依赖参数 +default: (build "main") + +build target: + @echo 'Building {{target}}...' +``` + +### Just 函数 + +```shell +hello name: + echo {{os()}} + echo {{uppercase(name)}} + +# 函数类别 +* 系统信息 +* 系统信息 +* Justfile 和 Justfile目录 +* 字符串操纵 +* 路径操纵 + +# String contact: (key + ":" + value) +``` + +### 字符串-用双引号转义 + +```bash +tring-with-tab := "\t" +string-with-newline := "\n" +escapes := '\t\n\r\"\\' + +# 该字符串将评估为`foo\nbar\n` +x := ''' + foo + bar +''' +``` + +### 命令注释:quiet(@)、suppre­ss(-)、invert(!) + +```bash +hello: + @ echo "command will not be echoed" + - echo "ignore none-zero exit status and continue" + +@hello2: + echo "command will not be echoed" + +# 反转命令退出状态!- shell 功能 +hello3: + # 如果命令成功(退出状态为0),请仅退出 + ! git branch | grep '* master' +``` + +### 条件表达式:if、loop 和 while + + +```shell +# 正则表达匹配 +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" } }} +``` + +### Just 命令行 + + +```bash +# 运行配方(recipe) +$ just hello param1 + +# 按字母顺序列出配方(recipe) +$ just --list +$ just --summary + +# 显示有关配方(recipe)的完整信息 +just --show test + +# 选择以交互方式运行的配方(recipe) +$ just --choose + +# shell 完成 +just --comp­letions zsh +``` + +### 其他语言的配置 + +```bash +bash-test: + #!/usr/bin/env bash + set -euxo pipefail + hello='Yo' + echo "$hello from bash!" +``` + +### 私人配置 - 名称以开头 _ + +```bash +test: _test-helper + ./bin/test + +# ommited from 'just --list' +_test-helper: + ./bin/super-secret-test-helper-stuff +``` + +### 注意 + +```bash +# 每个命令行都由一个新的 shell 执行 +# 如果一个命令行执行失败,just会退出 +# 后面的命令行不会执行 +change-working-dir: + cd bar && pwd + # 多行构造 - 用斜线转义换行符 + if true; then \ + echo 'True!'; \ + fi + +# justfile 不区分大小写:Justfile、JUSTFILE 等 +# justfile 可以被隐藏:'.justfile' +# 从子目录调用配方:`~/app1/target>$ just build` +``` + +### 作为 shell 别名的配置 + +```bash +for recipe in `just -f ~/.justfile --summary`; do + alias $recipe="just -f ~/.justfile -d. $recipe" +done +``` + +### IDE 集成 + +- VS Code: +- JetBrains: