Bash-like scripting has become ubiquitous in operating systems, and it makes me wonder about its widespread adoption despite lacking certain programming conveniences found in other languages. While it may not be the ideal choice for large-scale software development, the bash shell possesses unique features that make it well-suited for interactive command-line processing, including pipelining, text manipulation, and file handling. Why isn’t there an alternative that combines the best of bash’s command-line capabilities with the robustness and scalability of traditional programming languages. Why do even new operating systems, such as Redox OS, opt for a similar syntax rather than a completely different programming language?

Here are some of the limitations I find in Bash compared to other programming languages:

  1. Syntax and Expressiveness:

    • Bash has a relatively simple syntax compared to other programming languages. It lacks some advanced language features such as object-oriented programming, complex data structures, and advanced control flow constructs.
    • The syntax of Bash can be less intuitive and more error-prone, especially for complex tasks or larger projects.
  2. Performance:

    • Bash scripts can be slower compared to compiled languages like C or Java. This is because Bash is an interpreted language, and each line of code is interpreted at runtime.
    • Bash may not be the best choice for computationally intensive tasks or applications that require high performance.
  3. Error Handling and Debugging:

    • Error handling and debugging in Bash can be challenging. Bash does not provide robust error handling mechanisms, and error messages can be cryptic and difficult to interpret.
    • Debugging Bash scripts can be cumbersome, as there is limited tooling and debugging support compared to other programming languages.
  4. Portability:

    • While Bash is available on most Unix-like systems, it may not be available on all platforms or versions. This can limit the portability of Bash scripts.
    • Bash scripts may not work as expected on non-Unix systems or require modifications to run on different platforms.
  5. Limited Standard Library:

    • Bash has a limited standard library compared to other programming languages. It lacks comprehensive libraries for tasks such as networking, database access, or advanced data manipulation.
    • Bash often relies on external tools or utilities to perform complex operations, which can introduce dependencies and compatibility issues.
  6. Lack of Modularity and Reusability:

    • Bash scripts can become monolithic and difficult to maintain as they grow in size. Bash does not provide strong mechanisms for modularization or code reuse.
    • Reusing code or creating libraries in Bash can be challenging, leading to code duplication and decreased maintainability.
78 points
*
Removed by mod
permalink
report
reply
47 points
*

It’s here, it’s there, it’s everywhere. The problem with replacing things that work with something “better” is that “better” is subjective, so you end up with a new “better” way every few years, and maintaining existing systems becomes a god awful slog. See the JavaScript ecosystem.

The bash I wrote 10 years ago still works today, and it will still work in 10 more years. The same bash will very likely work on your computer, on a remote server, etc. This is the power of not chasing “better” all the time.

Try running a Ruby or Node program from 10 years ago today on your computer. Now, try running it on a random Linux server.

Please do not take this as a slight against Ruby or Node, or any other high level programming language. Bash compared to those is simply apples and oranges, they are not the same thing.

By all means, if you have a project that requires a Ruby runtime anyway, write operational scripts with Ruby, run them with Rake, etc.

Want a portable script that doesn’t depend on a complex runtime? Use bash.

If bash is too limiting, use Perl. No, seriously. Perl is fine. It is about as ubiquitously available as bash, and the standard library likely has what you need to get the job done. People blindly dismiss Perl because some blog post told them to, usually in the context of writing application code. You’re not writing application code, you’re writing scripts. Would you write an application with bash? No.

permalink
report
reply
27 points

What features does bash have that make it so suitable for shells?

You mean, except being automatically available in basically every Linux distribution without having to install any additional software?

permalink
report
reply
6 points

They’re asking why it became available everywhere.

Bash-like scripting has become ubiquitous in operating systems, and it makes me wonder about its widespread adoption despite lacking certain programming conveniences found in other languages.

permalink
report
parent
reply
8 points

Because other languages available at that time lacked certain programming conveniences found in bash :) Despite its shortcomings, it’s still a very convenient language for running other programs, working with files, and piping output from one program to another, or to a file. Bash was first released in 1989, and I don’t know exactly when it passed the threshold for widespread adoption, but I can’t think of anything that would’ve been a better alternative.

I think OP is also asking “why aren’t people switching to something else now” which is a completely different question.

permalink
report
parent
reply
-2 points

Because it’s automatically available in basically every Linux distribution without having to install any additional software.

permalink
report
parent
reply
5 points

So it became ubiquitous because it was ubiquitous.

Got it.

permalink
report
parent
reply
26 points

Bash is fine. Now powershell, that’s utter garbage.

permalink
report
reply
19 points

On behalf of garbage, I loudly protest on this attempt to assimilate it to Powershell.

permalink
report
parent
reply

Bah! I find it hard to believe that if you ever truly used ps that you’d think it was garbage.

I’m rather fond of it myself.

permalink
report
parent
reply
1 point

Work forbids me from writing scripts in anything other than PowerShell or Batch and its painful. Would be a non-issue if I could use anything else. I’m all too familiar with ps and its overly long commands.

permalink
report
parent
reply
1 point

@BarrierWithAshes

cat list.txt |? $_ -eq “ok” } %{ $_ +“or not ok”

This sows nicely in the console. Your challenge, should you accept it, is to append a string of 100char instead of “or nor ok” and output this in a file, one row per string.

Good luck and remember the bureau will negate participating in any element of this mission

@GodOfThunder @SeeJayEmm

permalink
report
parent
reply
10 points

I upvoted because fuck microsoft but i was very surprised at how easy it was to script in ps. Outputs are formatted similarly and you can quite easily have exactly the info you want ,how you want, while in bash its a lot more loose. That comes with the open source territory though.

permalink
report
parent
reply
2 points
*

This, powershell is pretty nice albeit verbose and TTY in Windows suck and slow (haven’t scripted in PS since 4 years ago so not sure about current state of affairs). Python is my de-facto shell now if I want to do anything shell related.

permalink
report
parent
reply
2 points

PS is still slow AF

permalink
report
parent
reply
2 points

That’s about why I don’t like it. Commands are too verbose and specific.

permalink
report
parent
reply
0 points

I never used Powershell. Why is it garbage in your opinion?

permalink
report
parent
reply
1 point

Commands are too verbose. A line I write in bash could be 15 characters. In Powershell it would be 30+. Each command is several words mashed together and not even in proper camelcase. Some words are upper some lower. I can predict the next word in a bash script. In Powershell i gotta look it up.

permalink
report
parent
reply
-5 points
*
Deleted by creator
permalink
report
parent
reply
13 points

50k lines is, IMHO, way too large for a bash script. I’d switch to python long before before that. Bash is primarily an *interactive shell. Bash has a lot of nice scripting capabilities (that few are aware of, let alone use) but its primary use is not as a programing language. As far as standard libraries go: sed, awk, grep, curl, netcat, etc… provide plenty of advanced capabilities. That’s the Unix philosophy, lots of small utilities that each do one thing well and that work with streams of bytes as i/o. Tie them together with a powerful shell, and an ordinary user can do quite a lot without “programming”. Is the Unix philosophy perfect? No. Has it proved to be the most flexible and successful compute environment developed for over 50 years? Yes.

permalink
report
parent
reply
10 points

Engineering is tradeoffs.

A command shell is focused on file operations and starting/stopping applications. So it makes it easy to do those things.

You can use scripting languages (e.g. Node.js/Python) to do everything bash does but they are for general purpose computing and so what and how you perform a task becomes more complicated.

This is why its important to know multiple languages, since each one will make specific tasks easier and a community forms around them as a result.

If I want to mess with the file system/configuration I will use Bash, if I want to build a website I will use Typescript, if I want to train a machine learning model I will use Python, if I am data engineering I will use Java, etc .

permalink
report
parent
reply
8 points

I personally wouldn’t, because the Unix philosophy should still apply. If you need 50k lines of bash to do something that a collection of existing command line tools already can do, you may need to re-evaluate your needs.

As @nous@programming.dev said here, POSIX compliance is extremely important. Much of the “real world” infrastructure is still UNIX based, especially in finance. It isn’t easy to replace those systems at all, especially a legacy codebase that literally the entire world runs on. COBOL and Fortran applications in banking are still being updated today, despite efforts to modernise systems because they just work and the code is pretty much hardened at this point.

As always, in every industry, there is a “right tool” for the job. The great thing about the Unix philosophy is, if correctly applied across your stack, it doesn’t matter what language you write the tools in. Your bash script is only going to be forwarding that output to something that is suited to handle it. This person sped up their python application by using Rust for one set of functions.

permalink
report
parent
reply
23 points
*

why are you stuck with bash? just write a shebang and then your interpreter in the first line of your script.

i can use bash, python, lua and al kinds of stuff…

i don’t understand the question. if you mean, why does my shell only accept bash syntax, if i set my shell to bash, idk. use another shell?

‘sh’ is kind of the smallest common thing that’s available everywhere. so when you got to script something that needs to run somewhere not under your control, you use ‘sh’. and that’s kind of it works. you’ll find something, that’s been around for some time, otherwise it won’t have spread everywhere. and now you can’t replace it in newer products, because there is so much stuff using it.

if that isn’t one of your problems, go with my first suggestions and just use python or something like that as your scripting language.

permalink
report
reply
11 points

I’m gonna get crucified for saying this, but… I write a lot of my scripts in PHP. It’s just a language that I’m very familiar with.

permalink
report
parent
reply
11 points

This isn’t reddit, if that tool does the jobs effectively then great.

permalink
report
parent
reply
4 points

crucified?! You’re awesome mate!

Plus, on the fediverse, PHP’s kinda cool again (I think) … or at least should be.

permalink
report
parent
reply
1 point

i think lemmy is coded in rust.

permalink
report
parent
reply
2 points
*

( my oppinion: i personally don’t like php and js for being too complicated. they are very easy to begin with, which is a good thing. but too difficult to master. there are soo many weird things going on, so many edge cases to remember, and all the pitfalls that are there to help the beginner but require a professional to pay close attention. i like something strict, maybe with type safety and a compiler that yells at you if you’re forgetting something or trying to do something stupid. not silently convert it. )

Other than that: Whatever floats your boat… I don’t think it’s wrong to use something like php. i have used it and still use it from time to time. heck, i’ve even used lua where people start counting with ‘1’. sometimes it is the correct tool. sometimes it’s more important to get a job done, than having it done in a certain way. and of course people like to work with something that they’re familiar with. you’re probably better off and faster this way.

permalink
report
parent
reply
2 points

I’ve used Js for scripts, especially when JSON is involved.

My logic is to use whichever language is best for the job out of those I’m familiar with, and can be understood by people who might read it. Then I forget logic and try to use lisps wherever possible.

permalink
report
parent
reply

Linux

!linux@lemmy.ml

Create post

From Wikipedia, the free encyclopedia

Linux is a family of open source Unix-like operating systems based on the Linux kernel, an operating system kernel first released on September 17, 1991 by Linus Torvalds. Linux is typically packaged in a Linux distribution (or distro for short).

Distributions include the Linux kernel and supporting system software and libraries, many of which are provided by the GNU Project. Many Linux distributions use the word “Linux” in their name, but the Free Software Foundation uses the name GNU/Linux to emphasize the importance of GNU software, causing some controversy.

Rules

  • Posts must be relevant to operating systems running the Linux kernel. GNU/Linux or otherwise.
  • No misinformation
  • No NSFW content
  • No hate speech, bigotry, etc

Related Communities

Community icon by Alpár-Etele Méder, licensed under CC BY 3.0

Community stats

  • 7.5K

    Monthly active users

  • 6.6K

    Posts

  • 179K

    Comments