Merge nucleic/sleek-thistle-egret-fyej into dev

This commit is contained in:
2026-07-18 05:19:31 -07:00
commit b6be87b72d
677 changed files with 102939 additions and 0 deletions
+71
View File
@@ -0,0 +1,71 @@
//! Example of instantiating a shell and calling a shell function in it.
use anyhow::Result;
async fn instantiate_shell() -> Result<brush_core::Shell> {
let shell = brush_core::Shell::builder().build().await?;
Ok(shell)
}
async fn define_func(shell: &mut brush_core::Shell) -> Result<()> {
let script = r#"hello() { echo "Hello, world: $@"; return 42; }
"#;
let result = shell
.run_string(
script,
&brush_core::SourceInfo::default(),
&shell.default_exec_params(),
)
.await?;
eprintln!("[Function definition result: {}]", result.is_success());
Ok(())
}
async fn run_func(shell: &mut brush_core::Shell, suppress_stdout: bool) -> Result<()> {
let mut params = shell.default_exec_params();
if suppress_stdout {
params.set_fd(
brush_core::openfiles::OpenFiles::STDOUT_FD,
brush_core::openfiles::null()?,
);
}
let result = shell
.invoke_function("hello", std::iter::once("arg"), &params)
.await?;
eprintln!("[Function invocation result: {result}]");
Ok(())
}
async fn run(suppress_stdout: bool) -> Result<()> {
let mut shell = instantiate_shell().await?;
define_func(&mut shell).await?;
for (name, _) in shell.funcs().iter() {
eprintln!("[Found function: {name}]");
}
run_func(&mut shell, suppress_stdout).await?;
Ok(())
}
fn main() -> Result<()> {
const SUPPRESS_STDOUT: bool = true;
// Construct a runtime for us to run async code on.
let rt = tokio::runtime::Builder::new_multi_thread()
.enable_all()
.build()?;
rt.block_on(run(SUPPRESS_STDOUT))?;
Ok(())
}