Add just_executable() function (#775)
The `just_executable()` function returns the absolute path of the currently running `just` executable.
This commit is contained in:
parent
6f42c8b737
commit
13e9f406c8
16
README.adoc
16
README.adoc
@ -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.
|
||||
|
@ -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()
|
||||
)
|
||||
})
|
||||
}
|
||||
|
@ -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#"
|
||||
|
Loading…
Reference in New Issue
Block a user