The Shells of the 2020s

Del, I'm feeling like a ghost in a shell

Nov 27, 2023 ยท shell, terminal

At the time of writing, Faviconfish's homepage, probably jokingly, says "Finally, a command line shell for the 90s". Tangentially, in 2019 macOS made the switch from Faviconbash to Faviconzsh as its default shell.

With this intro, the three actors are set on the stage: Those three are the most popular shells of the 2000s. (In order, bash, zsh, and then fish.)

(There's also Windows's part of this history, we'll get to it later, much like the rest of the world will.)

!!! PICTURE OF A TERMINAL WITH SHELLS OR SOMETHING !!!

My own personal story is the usual one, I started with bash, then zsh, I then proceeded to install way too many plugins using FaviconOh-My-Zsh, and then I switched to fish. I've been using fish for a few years now, and honestly, apart from the standard scripting language (that a shebang will take care of anyway), I don't miss anything from bash or zsh. Just having actual working completions without installing a plugin or having to configure anything is great.

In this article, I'm not going to try to convince you to switch to fish or anything if you're happy with your current shell, that's great. But, I'd like to explore the future shells.

To re-use fish's joke, what will be the shell of the 2020s?

A tale of two Users

As Oil describe it, there's two type of shell users: the people who just type commands and the people who write long scripts.

I know how to write scripts, but I: generally don't need to, and more importantly, don't want to. As such, the shells that I find interesting are definitely mostly the one that cater to the command-typers. FaviconElvish having a built-in file manager is a great example of that, for instance.

The contenders

There's a lot of shells coming out left and right on GitHub, I'll focus on the ones I know of (duh) and the ones that seem to be the most liked / popular.

Every shell obviously has its own vision and goals, but they do share a few common points over older shells:

  • They're all cross-platform, and work on Linux, macOS, and Windows.
  • For the ones that focuses on the interactive aspect of things, they'll typically include a lot of features that are usually only available through plugins or hidden in settings in other shells. Fuzzy completions, color highlighting, file manager, default prompts with a lot of information, etc.

PowerShell

PowerShell is a shell that comes with Windows, and is probably the oldest "shell of the future" (2006). It does (apparently) work on other platforms, but still, it's very Windows-specific and since I don't use Windows, well I don't have much to say about it. Nonetheless, it is definitely worth mentionning because it was one of the modern inspiration for a lot of shells that came after it.

It features a fairly neat system they call "Cmdlets" which wrap around the usual commands (ls, cat, echo, etc.), and allow for a more object-oriented approach to the shell. For instance, Get-ChildItem is the equivalent of ls, but it returns a list of "objects" instead of raw text, which you can then pipe to other commands that are also aware of the type of the objects, this is often called "structured data"

It takes a while to get used to the commands, but it's honestly really cool what you can do with it.

Terminal window
# List all the files in the current directory whose filename ends with .txt
# and only show the name and length of the file
Get-ChildItem -Include *.txt | Select-Object Name, Length

Elvish

Elvish mostly focuses on the interactive aspect of things, and as such, mainly target the more "casual user" mentioned earlier, however it still has numerous benefits for the other group, namely supporting structured data and a more modern scripting language.

Also, Elvish is a neat name for a shell.

Oil

Oil is a shell that aims to be a "better bash", there's no interactive bells and whistle, but it has a nice(r) script language than Bash. As noted previously, it's not really what I'm personally looking for in a shell, since it mostly focuses on the scripting aspect of things. Still, it's quite interesting and their blog is a great read.

Nushell

FaviconNushell is the shell that I'm the most excited about and the one I believe to be the most likely to become the new Fish of the 2020s.

erika;

Toggle mobile menu