this post was submitted on 02 Sep 2023
65 points (100.0% liked)

Programming

423 readers
9 users here now

Welcome to the main community in programming.dev! Feel free to post anything relating to programming here!

Cross posting is strongly encouraged in the instance. If you feel your post or another person's post makes sense in another community cross post into it.

Hope you enjoy the instance!

Rules

Rules

  • Follow the programming.dev instance rules
  • Keep content related to programming in some way
  • If you're posting long videos try to add in some form of tldr for those who don't want to watch videos

Wormhole

Follow the wormhole through a path of communities !webdev@programming.dev



founded 1 year ago
MODERATORS
 

why?

Because bash feels clunky to write and work with for anything non-trivial, especially compared to other scripting languages.

Why not another scripting language (no compile necessary)?

Because bash and sh are installed nearly everywhere. Any other scripting language means the user is required to have that installed, and that is far less likely to be the case.

If I could write my scripts in a nice syntax, but be sure my users will be able to use it effortlessly by distributing to them compiled versions, then that would make both of our lives easier!

Thoughts? Are there any languges that do this?

you are viewing a single comment's thread
view the rest of the comments
[–] swordsmanluke@programming.dev 3 points 1 year ago

I'm gonna pile in with yet another option that isn't a language that compiles to bash...

Consider Ruby for easier shell scripting. With its back tick syntax for executing shell commands, it's quick to use when you want to glue together a series of commands. ...and then you get to use a sane syntax for your script's logic.

Ex:

# Check my history for all usages of the xsv command
# and extract the filename
csv_files = `grep ~/.zsh_history "xsv" | awk '{print $3}'`.
                     split("\n").
                     map(&:chomp)

# list any csv with my phone number
csv_files.select { | filename|
  `grep #{filename} "555-1234"`.chomp != ""
}.each {|filename| puts filename}