Rustlike shell scripting language (WIP) -> use rust_cmd_lib instead.
Resilient & robust shell script, compiling to rust code/bash script
$ cargo buildrust-shell-script$:~/rust-shell-script$ cat examples/hello.rss
cmd error_command() {
do_something_failed
}
fun bad_greeting(name) {
info "Running error_command ..."
error_command
output "hello, ${name}!"
}
fun good_greeting(name) {
info "Running good_command ..."
output "hello, ${name}!"
}
cmd main() {
let bad_ans = $(bad_greeting "rust-shell-script")
info "${bad_ans}"let good_ans = $(good_greeting "rust-shell-script")
info "${good_ans}"return 0
}rust-shell-script:~/rust-shell-script$ target/debug/rust-shell-script -t bash examples/hello.rss Generating bash script to examples/hello.sh ...rust-shell-script:~/rust-shell-script$ shellcheck examples/hello.sh rust-shell-script:~/rust-shell-script$ echo$?
0#!/bin/bash## Generated by rust-shell-script#."${RUNTIME:-.}/cmd_lib.sh"error_command() {
do_something_failed
}
functionbad_greeting() {
local name="$1"
info "Running error_command ..."
error_command
output "hello, ${name}!"
}
functiongood_greeting() {
local name="$1"
info "Running good_command ..."
output "hello, ${name}!"
}
main() {
local bad_ans
bad_ans=$(_call bad_greeting "rust-shell-script")
info "${bad_ans}"local good_ans
good_ans=$(_call good_greeting "rust-shell-script")
info "${good_ans}"return 0
}
main "$@"All command errors will be captured automatically, even within bash function:
rust-shell-script:~/rust-shell-script/examples$ ./hello.sh Running error_command ...
/bin/bash: line 219: do_something_failed: command not found
FATAL: Running command (bad_ans=$(_call bad_greeting "rust-shell-script")) near script hello.sh:main():1 failed (ret=127)tao@sophia:~/rust-shell-script$ target/debug/rust-shell-script -t rust examples/hello.rss Generating rust code to examples/hello.rs ...// Generated by rust-shell-scriptmod cmd_lib;usecrate::cmd_lib::{CmdResult,FunResult};fnerror_command() -> CmdResult{run_cmd!("do_something_failed")}fnbad_greeting(name:&str) -> FunResult{info!("Running error_command ...");error_command()?;output!("hello, {}!", name)}fngood_greeting(name:&str) -> FunResult{info!("Running good_command ...");output!("hello, {}!", name)}fnmain() -> CmdResult{let bad_ans = bad_greeting("rust-shell-script")?;;info!("{}", bad_ans);let good_ans = good_greeting("rust-shell-script")?;;info!("{}", good_ans);returnOk(())}rust-shell-script:~/rust-shell-script/examples$ rustc hello.rs
rust-shell-script:~/rust-shell-script/examples$ ./hello
Running error_command ...
Running ["do_something_failed"] ...
Error: Os { code: 2, kind: NotFound, message: "No such file or directory" }