rust-script icon indicating copy to clipboard operation
rust-script copied to clipboard

Ability to run a script from stdin

Open wiktor-k opened this issue 1 year ago • 2 comments

Hi,

I just found rust-script and it's super-great! :heart:

I'm using it to generate a small Rust script and then run it like that:

sed 's/PKG/{{ pkg }}/g;s/KIND/{{ kind }}/g' > .script.rs <<< '{{ render-script }}'
chmod +x .script.rs
./.script.rs {{ output }}
rm --force .script.rs

And I thought it would be convenient if I could just pipe the script directly to rust-script without saving it to file, something like that:

sed 's/PKG/{{ pkg }}/g;s/KIND/{{ kind }}/g' | rust-script --some-kind-of-option <<< '{{ render-script }}'

I've seen that there's a --loop option but sadly this is for writing filters not entire scripts.

Would something like this be in-scope for this project?

Thanks! :wave:

wiktor-k avatar Jan 23 '24 13:01 wiktor-k

Does process substitution do what you need?

$ rust-script <(echo 'println!("Hello '"$USER"'!");')
Hello gjum!

Gjum avatar May 30 '24 22:05 Gjum

:thinking: Hm... maybe I'm holding it wrong or the inner shell is messing up the outer one but this fails:

rust-script <( sed 's/PKG/ssh-openpgp-auth/g;s/KIND/shell_completions/g' <<< '//! ```cargo
//! [dependencies]
//! pkg = { path = "PKG", package = "PKG" }
//! clap_allgen = "0.1.0"
//! ```

fn main() -> Result<(), Box<dyn std::error::Error>> {
    clap_allgen::render_KIND::<pkg::Commands>(
        &std::env::args().collect::<Vec<_>>()[1],
    )?;
    Ok(())
}
' ) '/tmp/xxz'

The error is:

error: failed to get `ssh-openpgp-auth` as a dependency of package `_63_d589d09bfb5f45ea9b4b85e0 v0.1.0 (/home/wiktor/.cache/rust-script/projects/d589d09bfb5f45ea9b4b85e0)`

Caused by:
  failed to load source for dependency `ssh-openpgp-auth`

Caused by:
  Unable to update /dev/fd/ssh-openpgp-auth

Caused by:
  failed to read `/dev/fd/ssh-openpgp-auth/Cargo.toml`

Caused by:
  No such file or directory (os error 2)
error: Could not execute cargo

The following works:

sed 's/PKG/ssh-openpgp-auth/g;s/KIND/shell_completions/g' > .script.rs <<< '//! ```cargo
//! [dependencies]
//! pkg = { path = "PKG", package = "PKG" }
//! clap_allgen = "0.1.0"
//! ```

fn main() -> Result<(), Box<dyn std::error::Error>> {
    clap_allgen::render_KIND::<pkg::Commands>(
        &std::env::args().collect::<Vec<_>>()[1],
    )?;
    Ok(())
}
'
rust-script .script.rs '/tmp/xxz'
rm --force .script.rs

Just for the record I'm modifying this file.

Thanks for your time! :wave:

wiktor-k avatar Jun 03 '24 10:06 wiktor-k