Hacker News new | ask | show | jobs
by 1vuio0pswjnm7 883 days ago
"JavaScript is the world's most popular scripting language."

Perhaps, based on usage.

But shell must be the world's most ubiquitous scripting language.

Not every computer has a Javascript engine but most have a shell.

Many, many computers have no browser, let alone a GUI. Some small form factor computers might have embedded Javascript engine but that's a minority.

No browser on the router.

10 comments

I'd argue the opposite: more computers have an end-user accessible JavaScript engine (a browser) than an end-user accessible shell.
It really depends on how you define "computer".
Let's not forget, "3 billion devices run Java"
Can you give an example of a device that has an end-user accessible shell, but not an end-user accessible browser? Every iOS device is the opposite.
Your definition of "computer" seems to be too narrow. "A computer" does not have to have a shell, run linux, windows, or macos - "a computer" can be an embedded 8-bit SOC.

Definition of computer: "a device, usually electronic, that processes data according to a set of instructions."

Maybe it's pedantic, but you're simply not counting trillions of real computers in the world doing valuable work without any kind of user interface, even IoT devices that are connected to the internet. I have dozens of home automation "computers" that have no such end-user accessible shell, but I can definitely ping their IP address and control them in various ways - and I create the firmware for devices (ESP32 primarily), so I can assure you they are the full definition of "a computer" and that they have no shell, do not run javascript, and have no browser.

And yet those embedded devices can be forced to run a version of Javascript.

Given the whole discussion is about prevalence of shell interpreters vs javascript engines, the existence of devices that neither interpret shell nor javascript is entirely beside the point. There are a ton of fish in the ocean, but they don't matter when determining whether more land animals have 4 legs or lungs.
Sure, if you set your own goalposts for the argument, you get to win any way you want.

>"I'd argue the opposite: more computers have an end-user accessible JavaScript engine (a browser) than an end-user accessible shell."

So let's use a specific goalpost and frame "a computer" as a desktop personal computer.

Today, there are no mainstream personal computers sold that don't come with both a user accessible shell and a web browser. Even Chromebooks have a shell. Just because a user doesn't have a clue how to use it doesn't mean it's not there.

Oh, did you mean to include phones in this pointless internet argument? Because that's an entirely different goalpost, and if you want to include phones then you should also include routers, IoT and embedded devices as "computers", says me.

Windows comes with two shells (CMD and Windows Power Shell 5.1). MacOS comes with zsh or bash (maybe both). I think one problem here is people are assuming a shell must be a Linux shell.
There's no point double counting shells. Just two questions: can the end user run shell commands, can the end user load a web page. I bet many more devices allow the end user to load a web page than run shell commands.
Not true - shell does not run on Windows, iPhones etc.

Even macOS has issues with those who assume Linux is the only Unix, Apple's bash is very old and does not run many scripts.

Unfortunately Javascript does get installed everywhere,

Uh, MacOS has zsh (which has far more features than most other POSIX shells), and even old bash has POSIX compatibility.

Your TV/IoT device likely has busybox, as does your router.

You install git on windows, it's got a (POSIX) shell.

The number of places that lack a shell is tiny.

Node/deno/bun are rare, and browsers whilst being more common, still require the device to have some kind of GUI.

> You install git on windows, it's got a (POSIX) shell.

I don't think it's in the path by default so if some program like npm calls exec("rm") it's still going to fail I think.

Read my comment on macOS please - it explicitly is about dealing with Linux people who write scripts assuming new versions of Bash.

Now if Linux used zsh then your comment is valid.

Bash shell scripts do not necessarily run in zsh.

Most Windows users do not install git. iPhones don't have a shell.

Assuming `/bin/sh` is bash is going to break on a whole bunch of systems (not just MacOS), and zsh implements POSIX. Also, this is for bun, so I'd be concerned that you're missing git on Windows.
"Your chocolate is in my peanut butter."

https://www.youtube.com/watch?v=fz-_oKWcnjs

   ftp -4o'|tar tzf -|grep -c \.sh$' https://nodejs.org/dist/v20.11.0/node-v20.11.0.tar.gz
   80
There are 80 shell scripts in the NodeJS tarball. Not to mention all the references to the shell in the documentation.

   ftp -4o'|tar tzf -|grep \.js$' https://zircon-guest.googlesource.com/third_party/dash/+archive/refs/heads/master.tar.gz
There are no Javascripts in the Dash tarball.

NodeJS needs the shell, but the shell does not need NodeJS.

"The shell is not a language."

Whatever it "is" (cf. what it _does_), it's essential.

1. NetBSD

https://ftp.netbsd.org/pub/NetBSD/NetBSD-current/src/bin/

https://ftp.netbsd.org/pub/NetBSD/NetBSD-current/src/bin/sh/...

2. FreeBSD

https://svnweb.FreeBSD.org/base/head/bin/

https://svnweb.FreeBSD.org/base/head/bin/sh/TOUR?view=co

3. "OpenBSD" fork of NetBSD

https://cvsweb.openbsd.org/src/bin/

https://cvsweb.openbsd.org/src/bin/sh/Attic/TOUR

4. "DragonflyBSD" fork of FreeBSD

https://gitweb.dragonflybsd.org/dragonfly.git/tree/refs/head...

https://gitweb.dragonflybsd.org/dragonfly.git/blob_plain/ref...

OpenBSD defaults to ksh for _login_ shell. But we are discussing _scripting_. Evidence indicates ash is more prevalent as a default scripting shell. It's also the login shell on NetBSD. FreeBSD switched their login shell from tcsh to ash. And even OpenBSD still has ash in their source tree.

https://www.in-ulm.de/~mascheck/various/ash/

Basically all computers have a shell, but "shell" is not a language so that is irrelevant.

I assume you are actually talking about Bash or maybe POSIX shell? That's only available on ~20% of desktop computers.

Lots and lots of IoT devices running node…you might be shocked
"Lots and lots" sounds like a guess.
I have no idea in general, but based on error messages from my Ikea Dirigera Hub, at least its REST API is implemented in node!
> But shell must be the world's most ubiquitous scripting language.

“Shell” isn’t a language. It’s a collection of languages. And not even a consistent one:

- Most BSDs don’t ship Bash as part of base. They default to ksh

- macOS does ship bash but an ancient version and defaults to Zsh

- Some Linux distorts don’t ship sh, instead symlinking to dash or bash.

- Windows doesn’t have any of the above as part of its base install.

""shell" isn't a language" - HN commenter "IshKebab"

""Shell" is not a language" - HN commenter "hnlmorg"

"Although most users think of the shell as an interactive command interpreter, it is really a programming language in which each statement runs a command. Because it must satisfy both the interactive and programming aspects of command execution, it is a strange language, shaped as much by history as by design." - Brian W. Kernighan & Rob Pike

Kernighan, Brian W.; Pike, Rob (1984). The UNIX Programming Environment. Englewood Cliffs: Prentice-Hall. ISBN 0-13-937699-2.

https://ia600400.us.archive.org/24/items/UnixProgrammingEnvi...

Windows has a shell called "cmd.exe"

https://ss64.com/nt/

"Shell isn't a language."

Github lists shell as a programming language.

     tnftp -4o"|sed -n '/^Shell:/,/language_id:/p'" \
     https://raw.githubusercontent.com/github-linguist/linguist/master/lib/linguist/languages.yml

     HOST=raw.githubusercontent.com;PATH=/github-linguist/linguist/master/lib/linguist/languages.yml
     (printf 'GET '$PATH' HTTP/1.0\r\n';printf 'Host: '$HOST'\r\n\r\n') \
     |busybox ssl_client 185.199.108.133 \
     |sed -n '/^Shell:/,/language_id:/p'