函数

just 提供了一些内置函数,在编写配方时可能很有用。

系统信息

  • arch() — 指令集结构。可能的值是:"aarch64", "arm", "asmjs", "hexagon", "mips", "msp430", "powerpc", "powerpc64", "s390x", "sparc", "wasm32", "x86", "x86_64", 和 "xcore"
  • os() — 操作系统,可能的值是: "android", "bitrig", "dragonfly", "emscripten", "freebsd", "haiku", "ios", "linux", "macos", "netbsd", "openbsd", "solaris", 和 "windows"
  • os_family() — 操作系统系列;可能的值是:"unix""windows"

例如:

system-info:
  @echo "This is an {{arch()}} machine".
$ just system-info
This is an x86_64 machine

os_family() 函数可以用来创建跨平台的 justfile,使其可以在不同的操作系统上工作。一个例子,见 cross-platform.just 文件。

环境变量

  • env_var(key) — 获取名称为 key 的环境变量,如果不存在则终止。
home_dir := env_var('HOME')

test:
  echo "{{home_dir}}"
$ just
/home/user1
  • env_var_or_default(key, default) — 获取名称为 key 的环境变量,如果不存在则返回 default

调用目录

  • invocation_directory() - 获取 just 被调用时当前目录所对应的绝对路径,在 just 改变路径并执行相应命令前。

例如,要对 “当前目录” 下的文件调用 rustfmt(从用户/调用者的角度看),使用以下规则:

rustfmt:
  find {{invocation_directory()}} -name \*.rs -exec rustfmt {} \;

另外,如果你的命令需要从当前目录运行,你可以使用如下方式:

build:
  cd {{invocation_directory()}}; ./some_script_that_needs_to_be_run_from_here

Justfile 和 Justfile 目录

  • justfile() - 取得当前 justfile 的路径。

  • justfile_directory() - 取得当前 justfile 文件父目录的路径。

例如,运行一个相对于当前 justfile 位置的命令:

script:
  ./{{justfile_directory()}}/scripts/some_script

Just 可执行程序

  • just_executable() - just 可执行文件的绝对路径。

例如:

executable:
  @echo The executable is at: {{just_executable()}}
$ just
The executable is at: /bin/just

字符串处理

  • quote(s) - 用 '\'' 替换所有的单引号,并在 s 的首尾添加单引号。这足以为许多 Shell 转义特殊字符,包括大多数 Bourne Shell 的后代。
  • replace(s, from, to) - 将 s 中的所有 from 替换为 to
  • replace_regex(s, regex, replacement) - 将 s 中所有的 regex 替换为 replacement。正则表达式由 Rust regex 提供。参见 语法文档 以了解使用示例。
  • trim(s) - 去掉 s 的首尾空格。
  • trim_end(s) - 去掉 s 的尾部空格。
  • trim_end_match(s, pat) - 删除与 pat 匹配的 s 的后缀。
  • trim_end_matches(s, pat) - 反复删除与 pat 匹配的 s 的后缀。
  • trim_start(s) - 去掉 s 的首部空格。
  • trim_start_match(s, pat) - 删除与 pat 匹配的 s 的前缀。
  • trim_start_matches(s, pat) - 反复删除与 pat 匹配的 s 的前缀。

大小写转换

  • capitalize(s)1.7.0 - 将 s 的第一个字符转换成大写字母,其余的转换成小写字母。
  • kebabcase(s)1.7.0 - 将 s 转换为 kebab-case
  • lowercamelcase(s)1.7.0 - 将 s 转换为小驼峰形式:lowerCamelCase
  • lowercase(s) - 将 s 转换为全小写形式。
  • shoutykebabcase(s)1.7.0 - 将 s 转换为 SHOUTY-KEBAB-CASE
  • shoutysnakecase(s)1.7.0 - 将 s 转换为 SHOUTY_SNAKE_CASE
  • snakecase(s)1.7.0 - 将 s 转换为 snake_case
  • titlecase(s)1.7.0 - 将 s 转换为 Title Case
  • uppercamelcase(s)1.7.0 - 将 s 转换为 UpperCamelCase
  • uppercase(s) - 将 s 转换为大写形式。

路径操作

非可靠的
  • absolute_path(path) - 将当前工作目录中到相对路径 path 的路径转换为绝对路径。在 /foo 目录通过 absolute_path("./bar.txt") 可以得到 /foo/bar.txt
  • extension(path) - 获取 path 的扩展名。extension("/foo/bar.txt") 结果为 txt
  • file_name(path) - 获取 path 的文件名,去掉任何前面的目录部分。file_name("/foo/bar.txt") 的结果为 bar.txt
  • file_stem(path) - 获取 path 的文件名,不含扩展名。file_stem("/foo/bar.txt") 的结果为 bar
  • parent_directory(path) - 获取 path 的父目录。parent_directory("/foo/bar.txt") 的结果为 /foo
  • without_extension(path) - 获取 path 不含扩展名部分。without_extension("/foo/bar.txt") 的结果为 /foo/bar

这些函数可能会失败,例如,如果一个路径没有扩展名,则将停止执行。

可靠的
  • clean(path) - 通过删除多余的路径分隔符、中间的 ... 来简化 pathclean("foo//bar") 结果为 foo/barclean("foo/..").clean("foo/./bar") 结果为 foo/bar
  • join(a, b…) - 这个函数在 Unix 上使用 /,在 Windows 上使用 \,这可能会导致非预期的行为。/ 操作符,例如,a / b,总是使用 /,应该被考虑作为替代,除非在 Windows 上特别指定需要 \ 将路径 a 和 路径 b 拼接在一起。join("foo/bar", "baz") 结果为 foo/bar/baz。它接受两个或多个参数。

文件系统访问

  • path_exists(path) - 如果路径指向一个存在的文件或目录,则返回 true,否则返回 false。也会遍历符号链接,如果路径无法访问或指向一个无效的符号链接,则返回 false
错误报告
  • error(message) - 终止执行并向用户报告错误 message

UUID 和哈希值生成

  • sha256(string) - 以十六进制字符串形式返回 string 的 SHA-256 哈希值。
  • sha256_file(path) - 以十六进制字符串形式返回 path 处的文件的 SHA-256 哈希值。
  • uuid() - 返回一个随机生成的 UUID。