feat: add Justfile. (#276)
This commit is contained in:
		@@ -143,6 +143,7 @@ Quick Reference
 | 
				
			|||||||
[Netstat](./docs/netstat.md)<!--rehype:style=background: rgb(16 185 129);-->  
 | 
					[Netstat](./docs/netstat.md)<!--rehype:style=background: rgb(16 185 129);-->  
 | 
				
			||||||
[iptables](./docs/iptables.md)<!--rehype:style=background: rgb(32 74 135);-->  
 | 
					[iptables](./docs/iptables.md)<!--rehype:style=background: rgb(32 74 135);-->  
 | 
				
			||||||
[jq](./docs/jq.md)<!--rehype:style=background: rgb(16 185 129);&class=tag&data-lang=JSON-->  
 | 
					[jq](./docs/jq.md)<!--rehype:style=background: rgb(16 185 129);&class=tag&data-lang=JSON-->  
 | 
				
			||||||
 | 
					[Justfile](./docs/justfile.md)
 | 
				
			||||||
[Lsof](./docs/lsof.md)<!--rehype:style=background: rgb(16 185 129);-->  
 | 
					[Lsof](./docs/lsof.md)<!--rehype:style=background: rgb(16 185 129);-->  
 | 
				
			||||||
[Mitmproxy](./docs/mitmproxy.md)<!--rehype:style=background: rgb(4 92 135);-->  
 | 
					[Mitmproxy](./docs/mitmproxy.md)<!--rehype:style=background: rgb(4 92 135);-->  
 | 
				
			||||||
[Netcat](./docs/netcat.md)<!--rehype:style=background: rgb(4 92 135);-->  
 | 
					[Netcat](./docs/netcat.md)<!--rehype:style=background: rgb(4 92 135);-->  
 | 
				
			||||||
 
 | 
				
			|||||||
							
								
								
									
										283
									
								
								docs/justfile.md
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										283
									
								
								docs/justfile.md
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,283 @@
 | 
				
			|||||||
 | 
					Justfile 备忘清单
 | 
				
			||||||
 | 
					===
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					[](https://github.com/casey/just/network/dependents)
 | 
				
			||||||
 | 
					[](https://github.com/casey/just)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					[`just`](https://github.com/casey/just) 为您提供一种保存和运行项目特有命令的便捷方式
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					入门
 | 
				
			||||||
 | 
					----
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					### 简单的 justfile
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					```bash
 | 
				
			||||||
 | 
					#!/usr/bin/env just --justfile
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# hello 是配方(recipe)的名字
 | 
				
			||||||
 | 
					hello:
 | 
				
			||||||
 | 
					  echo "Hello World!"
 | 
				
			||||||
 | 
					```
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					### 带参数的配方
 | 
				
			||||||
 | 
					<!--rehype:wrap-class=row-span-2-->
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					```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-从评估中捕获输出
 | 
				
			||||||
 | 
					<!--rehype:wrap-class=row-span-2-->
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					```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 在任何地方工作:字符串/变量/参数
 | 
				
			||||||
 | 
					```
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					注意: 上面示例中 <code>\\`</code> 没有转义过来
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					### 别名
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					```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(@)、suppress(-)、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
 | 
				
			||||||
 | 
					<!--rehype:wrap-class=row-span-2-->
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					```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 命令行
 | 
				
			||||||
 | 
					<!--rehype:wrap-class=row-span-2-->
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					```bash
 | 
				
			||||||
 | 
					# 运行配方(recipe)
 | 
				
			||||||
 | 
					$ just hello param1
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# 按字母顺序列出配方(recipe)
 | 
				
			||||||
 | 
					$ just --list
 | 
				
			||||||
 | 
					$ just --summary
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# 显示有关配方(recipe)的完整信息
 | 
				
			||||||
 | 
					just --show test
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# 选择以交互方式运行的配方(recipe)
 | 
				
			||||||
 | 
					$ just --choose
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# shell 完成
 | 
				
			||||||
 | 
					just --completions 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: <https://marketplace.visualstudio.com/items?itemName=skellock.just>
 | 
				
			||||||
 | 
					- JetBrains: <https://plugins.jetbrains.com/plugin/18658-just>
 | 
				
			||||||
		Reference in New Issue
	
	Block a user