Skip to content

Rustlike shell scripting language; Resilient & robust shell script, compiling to rust code/bash script

License

Notifications You must be signed in to change notification settings

rust-shell-script/rust-shell-script

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

14 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

rust-shell-script

Rustlike shell scripting language (WIP) -> use rust_cmd_lib instead.

Resilient & robust shell script, compiling to rust code/bash script

Build & Install

$ cargo build

Example

Source file

rust-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
}

Compiling to bash

compiling

rust-shell-script:~/rust-shell-script$ target/debug/rust-shell-script -t bash examples/hello.rss 
Generating bash script to examples/hello.sh ...

passing shellcheck

rust-shell-script:~/rust-shell-script$ shellcheck examples/hello.sh 
rust-shell-script:~/rust-shell-script$ echo $?
0

generated bash script

#!/bin/bash
#
# Generated by rust-shell-script
#
. "${RUNTIME:-.}/cmd_lib.sh"

error_command() {
    do_something_failed
}

function bad_greeting() {
    local name="$1"

    info "Running error_command ..."
    error_command
    output "hello, ${name}!"
}

function good_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 "$@"

running script

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)

Compiling to rust

compiling

tao@sophia:~/rust-shell-script$ target/debug/rust-shell-script -t rust examples/hello.rss 
Generating rust code to examples/hello.rs ...

generated rust code

// Generated by rust-shell-script
mod cmd_lib;
use crate::cmd_lib::{CmdResult, FunResult};

fn error_command() -> CmdResult {
    run_cmd!("do_something_failed")
}

fn bad_greeting(name: &str) -> FunResult {
    info!("Running error_command ...");
    error_command()?;
    output!("hello, {}!", name)
}

fn good_greeting(name: &str) -> FunResult {
    info!("Running good_command ...");
    output!("hello, {}!", name)
}

fn main() -> CmdResult {
    let bad_ans = bad_greeting("rust-shell-script")?;;
    info!("{}", bad_ans);
    let good_ans = good_greeting("rust-shell-script")?;;
    info!("{}", good_ans);
    return Ok(())
}

running rust code

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" }

About

Rustlike shell scripting language; Resilient & robust shell script, compiling to rust code/bash script

Topics

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published