函数
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
。正则表达式由 Rustregex
包 提供。参见 语法文档 以了解使用示例。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)
- 通过删除多余的路径分隔符、中间的.
和..
来简化path
。clean("foo//bar")
结果为foo/bar
,clean("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。