Destination Linux 188: BASH vs ZSH vs FISH: What Is The Best Linux Shell?

Originally published at: Destination Linux 188: BASH vs ZSH vs FISH: The Best Linux Shell?


This is gonna sound kind of stupid but I switched to ZSH when Apple announced their intention to change. My guess is most people use the default shell and, whether we like it or not, a lot of developers use Macs. I wanted to be fluent in an environment that was going to become increasingly relevant. I’m staying with ZSH because without doing any extra work my command line workflow seems slightly better. It’s auto completion is better. Quirky cool plug-ins and themes are just a bonus.

1 Like

this is very interesting and a solid reason to give it a shot. I like it.

I havent really given much a lot of testing so I need to really give it a shot to see what the fuss is about. I know what features ZSH and FISH both offer but I never really felt the need to try them . . . I guess it is finally time to do it. :slight_smile:

FISH for me, but I must admit I never have played with ZSH (but will give it a try now). I used BASH for ages, of course, but heard @kernellinux recommend FISH wholeheartedly at some point and gave it a shot… and have never looked back.

Today, I’m using bash on all of my Linux boxes. I have used Powershell on Linux and even wrote a Powershell script on Linux to convert all of my Google Docs (Really JSON files with links back to the Google Doc file on Gdrive) to LibreOffice docs. I haven’t used zsh or fish. I do run older hardware so resources can be an issue for me. I have run Powershell on my best box an i7 with 16GB, and it is not instantaneous when it starts up. Just enough to be noticeable when you are use to the instantaneous nature of a bash shell opening on your system. Running Powershell on a RPi 3 made the CLI painful to use.

I don’t code or script other than the above mentioned Powershell script (made with lots of trial and error, help from the Powershell on Linux community, and copying and pasting after Google searches), and some bash scripts that are basically lists of bash commands in a file.

For the non-coder the choice of shell probably wouldn’t make a huge difference. At that point you would mostly ignore the underlying programming language and some of the nice features of fish and zsh (especially with plugins) might make your day to day life better as you simply use the shell to execute commands. If you have tons of bash scripts that you have written to automate tasks and you use these scripts on a regular basis it would be a larger cost to switch to fish or powershell because you would have to rewrite all of those scripts in a different scripting language. If you already have invested in learning bash and know it well, there is little motivation to leave bash, and I believe there are a number of utilities that have been written that can add some of the functionality that is lacking in bash to bash. I know that my son uses something to speed up “cd” commands to different directories. There are rust alternatives to common UNIX commands that can add some “bling” to your bash command output.

Because zsh is POSIX compliant and all of your bash scripts will run without issues, this would be a pretty easy transition for Linux users that are already proficient in bash scripting.

I would be interested to hear if someone who is proficient in bash scripting has made the switch to fish because of its easy syntax and is glad they made that switch or made the switch to Powershell and found the object oriented style of scripting worth the switch.

Fish uses local web pages for configuration and help…

I think this is awesome. :sunglasses:

Is that the stool shirt being subliminally advertised!!! … I think its working. :stuck_out_tongue_winking_eye: :crazy_face:

1 Like

I use Tilix as the terminal, since it supports many sub-window inside the main window. It can run and display many processes in the main window. You can add many sub-windows to the right and to the bottom and you can change the boundaries between the sub-windows easily with the mouse :slight_smile:

I run two backup processes to laptop and backup server in two sub-windows of the main Tilix window at the same time. Normal you have to fiddle with resizing and moving terminal windows to get the same result. The screenshot shows, how I run the ZFS incremental backup to i5-laptop (Ubuntu Mate 20.04) and Pentium 4 backup-server (FreeBSD 12.1) at the same time.

I’ve been using Fish for a year or so now. Considering how badly I type, I need someone’s help :slight_smile:

Been experience this journey myself, I don’t know how well supported each plugin framework is but it looks like all three popular shells have them.

List of the “Oh My…” ones #georgetakei

Oh My Bash GitHub - ohmybash/oh-my-bash: A delightful community-driven framework for managing your bash configuration, and an auto-update tool so that makes it easy to keep up with the latest updates from the community.
Oh My FIsh GitHub - oh-my-fish/oh-my-fish: The Fish Shell Framework
Oh My ZSH GitHub - ohmyzsh/ohmyzsh: 🙃 A delightful community-driven (with 2,000+ contributors) framework for managing your zsh configuration. Includes 300+ optional plugins (rails, git, macOS, hub, docker, homebrew, node, php, python, etc), 140+ themes to spice up your morning, and an auto-update tool so that makes it easy to keep up with the latest updates from the community. &

Thanks everyone, great show, as usual!

I’d like to start first by registering my complaint to @dasgeek. My illusion has been shattered today! Ryan, all this while I’ve been thinking you were a Time Lord, with a sonic screwdriver etc. Today I learn that your Tardis was a fake. I am shocked :wink:

With regard to the discussion about shells. I think there needs to be a distinction made here. Of course most people will use the shell as the command-line program they interact with the operating system with when they open a terminal window. In other words they’re using an interactive shell. Arguably though, the more serious function of the shell is for batch processing, for example when running installation scripts or build tools (I’m thinking LFS for example). I think that’s where POSIX compliance comes in. Mainly for developers. So the standard involves system calls that work on a low level, which other tools can be built on top of in a portable manner. For example threading is implemented using POSIX standards and this is extremely useful for writing code or higher-level libraries that use multi-processing. I don’t think it’s something that can completely disappear. When configuration requires something too complex to code in bash, which is very limited as a programming language, I’d say use Perl or Python for that part of the work. I think both are now pretty standard to expect to be installed on systems now.

If I did a lot of interactive command-line work, such as users of Kali probably need, yes, I would look at an interactive shell that makes me more productive than bash might. But I’d still keep bash for the default to ensure configuration, builds etc. all work as expected. Some systems, I believe, use batch shells that are smaller and faster than bash for initial startup/configuration, but as far as I know, bash is the general standard and is likely to remain so.

With regard to powershell, of course a corporation with lots of funding and resources could trump open source productivity which is often not well-funded and based on the good will of a very strong and decent community. Am I going to switch to their product though? Not unless I absolutely have to, because I still don’t trust their intentions, frankly.