Functions
just provides a few built-in functions that might be useful when writing recipes.
System Information
-
arch()— Instruction set architecture. Possible values are:"aarch64","arm","asmjs","hexagon","mips","msp430","powerpc","powerpc64","s390x","sparc","wasm32","x86","x86_64", and"xcore". -
os()— Operating system. Possible values are:"android","bitrig","dragonfly","emscripten","freebsd","haiku","ios","linux","macos","netbsd","openbsd","solaris", and"windows". -
os_family()— Operating system family; possible values are:"unix"and"windows".
For example:
system-info:
@echo "This is an {{arch()}} machine".
$ just system-info
This is an x86_64 machine
The os_family() function can be used to create cross-platform justfiles that work on various operating systems. For an example, see cross-platform.just file.
Environment Variables
env_var(key)— Retrieves the environment variable with namekey, aborting if it is not present.
home_dir := env_var('HOME')
test:
echo "{{home_dir}}"
$ just
/home/user1
env_var_or_default(key, default)— Retrieves the environment variable with namekey, returningdefaultif it is not present.
Invocation Directory
invocation_directory()- Retrieves the absolute path to the current directory whenjustwas invoked, beforejustchanged it (chdir’d) prior to executing commands.
For example, to call rustfmt on files just under the “current directory” (from the user/invoker’s perspective), use the following rule:
rustfmt:
find {{invocation_directory()}} -name \*.rs -exec rustfmt {} \;
Alternatively, if your command needs to be run from the current directory, you could use (e.g.):
build:
cd {{invocation_directory()}}; ./some_script_that_needs_to_be_run_from_here
Justfile and Justfile Directory
-
justfile()- Retrieves the path of the currentjustfile. -
justfile_directory()- Retrieves the path of the parent directory of the currentjustfile.
For example, to run a command relative to the location of the current justfile:
script:
./{{justfile_directory()}}/scripts/some_script
Just Executable
just_executable()- Absolute path to thejustexecutable.
For example:
executable:
@echo The executable is at: {{just_executable()}}
$ just
The executable is at: /bin/just
String Manipulation
-
lowercase(s)- Convertsto lowercase. -
quote(s)- Replace all single quotes with'\''and prepend and append single quotes tos. This is sufficient to escape special characters for many shells, including most Bourne shell descendants. -
replace(s, from, to)- Replace all occurrences offrominstoto. -
trim(s)- Remove leading and trailing whitespace froms. -
trim_end(s)- Remove trailing whitespace froms. -
trim_end_match(s, pat)- Remove suffix ofsmatchingpat. -
trim_end_matches(s, pat)- Repeatedly remove suffixes ofsmatchingpat. -
trim_start(s)- Remove leading whitespace froms. -
trim_start_match(s, pat)- Remove prefix ofsmatchingpat. -
trim_start_matches(s, pat)- Repeatedly remove prefixes ofsmatchingpat. -
uppercase(s)- Convertsto uppercase.
Path Manipulation
Fallible
-
absolute_path(path)- Absolute path to relativepathin the working directory.absolute_path("./bar.txt")in directory/foois/foo/bar.txt. -
extension(path)- Extension ofpath.extension("/foo/bar.txt")istxt. -
file_name(path)- File name ofpathwith any leading directory components removed.file_name("/foo/bar.txt")isbar.txt. -
file_stem(path)- File name ofpathwithout extension.file_stem("/foo/bar.txt")isbar. -
parent_directory(path)- Parent directory ofpath.parent_directory("/foo/bar.txt")is/foo. -
without_extension(path)-pathwithout extension.without_extension("/foo/bar.txt")is/foo/bar.
These functions can fail, for example if a path does not have an extension, which will halt execution.
Infallible
-
join(a, b…)- This function uses/on Unix and\on Windows, which can be lead to unwanted behavior. The/operator, e.g.,a / b, which always uses/, should be considered as a replacement unless\s are specifically desired on Windows. Join pathawith pathb.join("foo/bar", "baz")isfoo/bar/baz. Accepts two or more arguments. -
clean(path)- Simplifypathby removing extra path separators, intermediate.components, and..where possible.clean("foo//bar")isfoo/bar,clean("foo/..")is.,clean("foo/./bar")isfoo/bar.
Filesystem Access
path_exists(path)- Returnstrueif the path points at an existing entity andfalseotherwise. Traverses symbolic links, and returnsfalseif the path is inaccessible or points to a broken symlink.
Error Reporting
error(message)- Abort execution and report errormessageto user.
UUID and Hash Generation
sha256(string)- Return the SHA-256 hash ofstringas a hexadecimal string.sha256_file(path)- Return the SHA-256 hash of the file atpathas a hexadecimal string.uuid()- Return a randomly generated UUID.