shellharden
rust_cmd_lib
Our great sponsors
shellharden | rust_cmd_lib | |
---|---|---|
16 | 11 | |
4,543 | 988 | |
- | - | |
5.0 | 8.0 | |
about 1 month ago | 5 months ago | |
Rust | Rust | |
Mozilla Public License 2.0 | Apache License 2.0 |
Stars - the number of stars that a project has on GitHub. Growth - month over month growth in stars.
Activity is a relative number indicating how actively a project is being developed. Recent commits have higher weight than older ones.
For example, an activity of 9.0 indicates that a project is amongst the top 10% of the most actively developed projects that we are tracking.
shellharden
-
Shellcheck finds bugs in your shell scripts
Everytime I see Shellcheck coming up, I have to mention shellharden[0] written by a colleague of mine. It is basically shellcheck but it applies the suggested changes automatically.
0: https://github.com/anordal/shellharden
-
similar to shellcheck?
Also worth mentioning shellharden
-
Bash Pitfalls
See also:
* https://www.shellcheck.net/ — linting tool to avoid common mistakes and improve your script
* Bash Practices: https://mywiki.wooledge.org/BashGuide/Practices
* Bash Pitfalls: https://mywiki.wooledge.org/BashPitfalls
* safe ways to do things in bash: https://github.com/anordal/shellharden/blob/master/how_to_do...
* better scripting: https://robertmuth.blogspot.in/2012/08/better-bash-scripting...
* robust scripting: https://www.davidpashley.com/articles/writing-robust-shell-s...
-
Code formatter, linters, etc. Recommendations?
There is shellcheck, and shellharden which is a strict version of it. There are similar stuff here, some that also help with your editor. You can also use a docker version of shfmt. See here for a quick tutorial on shfmt.
-
What is best Method of Submitting Bash Script, short Python ignorance confession (lament.)
Regarding linters, there are several of them in most languages.For bash, there is Shellcheck or a more strict (and sometimes confusing) Shellharden to do exactly what you want.
-
Awesome Rewrite It In Rust - A curated list of replacements for existing software written in Rust
For example, shellharden looks awesome.
- anordal/shellharden Safe ways to do things in bash
- How to do things safely in Bash
- How to do things safely in Bash (2018)
rust_cmd_lib
- Was Rust Worth It?
-
Execute $(command) in std::process::Command?
With rust_cmd_lib, you can write below code without launching shell:
-
How to do things safely in Bash
zsh is also doing the variable substitution better than bash. FYI, I just released rust_cmd_lib 1.0 recently, which can do variable substitution without any quotes: https://github.com/rust-shell-script/rust_cmd_lib
- cmd_lib: v1.0 released!
-
Process file in parallel
With cmd_lib and rayon, it could be done in below one line code:
-
Using rust cmd_lib to replace your bash scripts!
#!/usr/bin/env ngs # In response to https://github.com/rust-shell-script/rust_cmd_lib/blob/1f2fc2303db3f467c42589bd944b31834c8a0bca/examples/dd_test.rs # $ ./dd_test.ngs --file /dev/nvme0n1 --block_size 4096 --threads_count 4 # [LOG 2021-03-20 10:57:14 IST] Dropping caches at first # [LOG 2021-03-20 10:57:14 IST] Running command: sudo bash -c echo\ 3\ \>\ /proc/sys/vm/drop_caches # [LOG 2021-03-20 10:57:15 IST] Running with threads: 4, block size: 4096 # [LOG 2021-03-20 10:57:15 IST] Running command: sudo bash -c dd\ if=/dev/nvme0n1\ of=/dev/null\ bs=4096\ skip=1310720\ count=655360\ 2\>\&1 # [LOG 2021-03-20 10:57:15 IST] Running command: sudo bash -c dd\ if=/dev/nvme0n1\ of=/dev/null\ bs=4096\ skip=655360\ count=655360\ 2\>\&1 # [LOG 2021-03-20 10:57:15 IST] Running command: sudo bash -c dd\ if=/dev/nvme0n1\ of=/dev/null\ bs=4096\ skip=1966080\ count=655360\ 2\>\&1 # [LOG 2021-03-20 10:57:15 IST] Running command: sudo bash -c dd\ if=/dev/nvme0n1\ of=/dev/null\ bs=4096\ skip=0\ count=655360\ 2\>\&1 # [LOG 2021-03-20 10:57:22 IST] thread 0 bandwidth: 450 MB/s # [LOG 2021-03-20 10:57:22 IST] thread 1 bandwidth: 451 MB/s # [LOG 2021-03-20 10:57:22 IST] thread 2 bandwidth: 453 MB/s # [LOG 2021-03-20 10:57:22 IST] thread 3 bandwidth: 451 MB/s # [LOG 2021-03-20 10:57:22 IST] Total bandwidth: 1805 MB/s # Command line arguments automatically fed into main() # Default data size - 10G F main(file:Str, block_size:Int=4096, threads_count:Int=1, data_size:Int=10 * 1024 * 1024 * 1024) { log("Dropping caches at first") $(log: sudo bash -c "echo 3 > /proc/sys/vm/drop_caches") log("Running with threads: ${threads_count}, block size: ${block_size}") # Parallel map: each callback runs in it's own thread cnt = data_size / threads_count / block_size results = threads_count.pmap(F(i) { off = cnt * i `log: sudo bash -c "dd if=$file of=/dev/null bs=$block_size skip=$off count=$cnt 2>&1"` }) total_bandwidth = 0 results.each_idx_val(F(i, output) { # "line:" makes the first line of output as the result of `...` bandwidth = `echo $output | line: awk '/MB/ {print $10}'`.Int() log("thread ${i} bandwidth: ${bandwidth} MB/s") total_bandwidth += bandwidth }) log("Total bandwidth: $total_bandwidth MB/s") } # When running without arguments F main() { # exit() - exit code is 1 unless otherwise specified exit("Usage: ${ARGV0} --file FILE [--block_size BLOCK_SIZE] [--threads_count THREADS_COUNT] [--data_size DATA_SIZE]") }
- Release v0.12.0 · rust-shell-script/rust_cmd_lib
-
Convert tetris.sh and pipes.sh line-by-line to rust code
Thanks for the inspiration from previous posts, and I tried to convert pipes.sh to rust code today. It turned out to be very straightforward with the help of rust_cmd_lib, and your can check both language versions in the project examples directory.
-
rust_cmd_lib v0.10: to write shell-script like tasks in a clean, natural and rusty way
Yes, your concern is correct and that's why I encourage people to use macros by default: https://github.com/rust-shell-script/rust_cmd_lib#security-notes
What are some alternatives?
ShellCheck - ShellCheck, a static analysis tool for shell scripts
PowerShell - PowerShell for every system!
shfmt - Dockernized shfmt. This formats shell script.
scripts - Useful scripts that I find handy to work with
shfmt - A shell formatter (sh/bash/mksh)
makesure - Simple task/command runner with declarative goals and dependencies
azure-policy - Repository for Azure Resource Policy built-in definitions and samples
pipe-trait - Make it possible to chain regular functions
sh - A shell parser, formatter, and interpreter with bash support; includes shfmt
babashka - Native, fast starting Clojure interpreter for scripting
bats-core - Bash Automated Testing System
shellclear - Secure shell history commands by finding sensitive data