Add just_executable() function (#775)

The `just_executable()` function returns the absolute path of the
currently running `just` executable.
This commit is contained in:
Benoit de Chezelles 2021-03-29 00:44:02 +02:00 committed by GitHub
parent 6f42c8b737
commit 13e9f406c8
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
3 changed files with 41 additions and 0 deletions

View File

@ -622,6 +622,22 @@ script:
./{{justfile_directory()}}/scripts/some_script
```
==== Just Executable
- `just_executable()` - Absolute path to the just executable.
For example:
```make
executable:
@echo The executable is at: {{just_executable()}}
```
```
$ just
The executable is at: /bin/just
```
==== Dotenv Integration
`just` will load environment variables from a file named `.env`. This file can be located in the same directory as your justfile or in a parent directory. These variables are environment variables, not `just` variables, and so must be accessed using `$VARIABLE_NAME` in recipes and backticks.

View File

@ -18,6 +18,7 @@ lazy_static! {
("invocation_directory", Nullary(invocation_directory)),
("env_var", Unary(env_var)),
("env_var_or_default", Binary(env_var_or_default)),
("just_executable", Nullary(just_executable)),
]
.into_iter()
.collect();
@ -123,3 +124,15 @@ fn env_var_or_default(
Ok(value) => Ok(value),
}
}
fn just_executable(_context: &FunctionContext) -> Result<String, String> {
let exe_path =
std::env::current_exe().map_err(|e| format!("Error getting current executable: {}", e))?;
exe_path.to_str().map(str::to_owned).ok_or_else(|| {
format!(
"Executable path is not valid unicode: {}",
exe_path.to_string_lossy()
)
})
}

View File

@ -1203,6 +1203,18 @@ test! {
status: EXIT_FAILURE,
}
test! {
name: test_just_executable_function,
justfile: "
a:
@printf 'Executable path is: %s\\n' '{{ just_executable() }}'
",
args: ("a"),
stdout: format!("Executable path is: {}\n", executable_path("just").to_str().unwrap()).as_str(),
stderr: "",
status: EXIT_SUCCESS,
}
test! {
name: infallable_command,
justfile: r#"