I used fish for a couple of years and really liked it. But I recently learned that I can configure ZSH to have all of the same auto-complete and plugins that I loved from fish. Now I have all of the creature comforts I like, with POSIX compliance

I found that while fish has better syntax than bash for most things, the hassles with incompatibility or unexpected behavior brought me much more trouble than BASH's syntax ever has

I really love fish and the philosophy behind it, especially the "configurability is the root of all evil" attitude. Makes for a well though out software that is a true pleasure to use.
I like software where you don't need to spend hours or even days on configuration and it just works out of box. Unfortunately the different syntax is no go for me. I have a bunch of scripts which I can run on my local machine and remote interchangeably. Even if syntax is better I want to learn rather `one syntax` that work everywhere. But that is only one thing that prevents me from trying it.
I've found fish to be absolutely wonderful for shell scripting. I can throw together a loop or a function with the sort of confidence I never could have in bash.
Shells and scripting languages are different things. I don't care how good of a scripting language Powershell is, it's painful to use as a shell. I don't care that fish can't run sh scripts, I've never used it on a machine that didn't have sh. Can we stop judging oranges for their lack of crunch?
Don't forget that if you use #!/bin/sh in POSIX compatible scripts, you can configure /bin/sh to symlink dash shell instead of bash or zsh. Dash will run scripts way faster (up to 4x) because it is less feature blown...

This is the reason, why I try to prevent using bash/zsh exclusive features in my daily use scripts.

Fish really shines in interactive use, like being able to write fish_vi_key_bindings, and that setting is preserved after restarting fish. Or using funced and funcsave to modify helper scripts, or abbr -s ...

I'm not sure I've ever opened my fish config file, but I'm still able to customize it easily

As another commenter pointed out, while Fish has some nice out-of-the-box features, they’re all achievable in Zsh with a few lines of plugins. And did you know Zsh has a short for loop? Along with fantastic plugins like fzf-tab, I don’t see a reason to use anything else right now.

Though, I’m keeping a very interested eye on Nu shell. They’re doing a lot of stuff right, and I expect it will become a very useful scripting language in its own right even when not used full-time as a shell.

It is typical HN that everyone is talking about Zsh and how it isn't so bad. And you know what, I used it for a while long time ago, and it is great. I even had config I could transport to another machine when I need.

All that can't be compared with fish out of the box, which is why I am using fish, it will be 10 or so years now. When I say use, I mean that, I just use it, I don't spend time learning it's obscure features, creating scripts etc, no, just use it.

I have alias list that I use to make myself productive and it goes along with me to a new machine. Very slim and simple configuration. That and Vim, but that is another story.

I started a new job recently, and I've been thinking about terminals and shells. I love a well configured modern env, but I can't be bothered spending the literal HOURS you need to setup everything... zsh, zsh plugins, fzf, fzf plugins, fd, dot bare, patched fonts, 24 bit terminal color, temrinal color theme, binutils color theme, powerline, diff-so-fancy... I get that the devil is in the details, but come on, can I just have a single "terminal environnement distribution" with sensible defaults and that's it. Something like SpaceMacs/SpaceVim but for all that. I don't want to spend the time configuring and maintaining this wonderful pile of obsolete-and-yet-somehow-still-the-best-we-got technology.
> my grandma was afraid of Linux, until I showed her that fish can autocomplete

Unknown user on discord

Not restricted to fish shell, but I can further recommend starship.rs as a prompt, and using fzf to search through command history.
I used Fish for several years before switching over to nushell a few weeks ago.

Nushell takes the ideas behind Fish even further by incorporating types other than strings and adding more built-in functionality that’s useful for your average command-line user.

I doubt I’ll go back but both are great! Highly recommend Fish and Nushell!

I've gone down the rabbit hole with zshrc/bashrc customization, there are endless options and gists and pages and its a never ending rabbit hole.

In the end I realized a well configured toolkit is enough for 99.99% of people, and there are an endless number of those as well. I use zsh-quickstart-kit which is updated often and has good speed and amazing features. You get all the fish features AFAIK and more with no risk of scripts breaking and it was a 1min install.

For non devs who don't need to script I'd recommend fish and there are distros that default to it now.

Is no one going to comment on for *.pdf assumes no spaces in filenames for the BASH example to be correct, what about Fish?
Is there anyone who can provide a simple summary for bash v zsh vs fish? Maybe I’m lazy but I’ve just stuck with bash for.. well since ever. Maybe it’s time to try something new but then if it ain’t broke… anyway would be interested in what things it does that I never knew I needed or things which just make life simpler/easier.
If you would like to add all these FISH things to ZSH:

- highlighting and displaying last suggested command execution from history

- file/dir highlighting

- commands coloring and stuff

Then check 'UPDATE 1' from here:


I can not use FISH as it does not honor the POSIX syntax for loops and stuff and I often type 'for' and 'while' POSIX loops at command line so I use ZSH. Besides that FISH is really nice shell.


Anyone else read that as “The fish smell is amazing”?
> You can configure your shell using a web interface! Just run fish_config

As much as I like the fish shell, I really consider this an anti-feature. A TUI application to configure the shell would make much more sense. The terminal emulator is your platform, not the Web.

Ok, let's do this. Past related threads:

Fish shell - https://news.ycombinator.com/item?id=27180420 - May 2021 (118 comments)

Fish Shell 3.2 - https://news.ycombinator.com/item?id=26302678 - March 2021 (128 comments)

Fish is not operational on a VT220 terminal (2015) - https://news.ycombinator.com/item?id=25526237 - Dec 2020 (113 comments)

New Features in the Fish Shell - https://news.ycombinator.com/item?id=24631138 - Sept 2020 (138 comments)

Dolphins learn from their peers to use empty shells to catch fish - https://news.ycombinator.com/item?id=23660910 - June 2020 (8 comments) (<-- just kidding)

Fish: A command line shell for the 90s - https://news.ycombinator.com/item?id=21361696 - Oct 2019 (83 comments)

Fish shell 3.0 - https://news.ycombinator.com/item?id=18776765 - Dec 2018 (220 comments)

Fish: A user-friendly command line shell for macOS, Linux, etc - https://news.ycombinator.com/item?id=15910897 - Dec 2017 (204 comments)

Fish (Shell) for a Week - https://news.ycombinator.com/item?id=14422672 - May 2017 (2 comments)

The fish shell is awesome - https://news.ycombinator.com/item?id=14179081 - April 2017 (7 comments)

Fish Shell Design Principles - https://news.ycombinator.com/item?id=11102941 - Feb 2016 (71 comments)

Fish shell 2.2 - https://news.ycombinator.com/item?id=9873090 - July 2015 (70 comments)

Fish shell - https://news.ycombinator.com/item?id=9566441 - May 2015 (182 comments)

FISH Shell: A dynamic shell - https://news.ycombinator.com/item?id=8783150 - Dec 2014 (3 comments)

Fish shell 2.1 - https://news.ycombinator.com/item?id=6626635 - Oct 2013 (151 comments)

fish shell - https://news.ycombinator.com/item?id=6224524 - Aug 2013 (75 comments)

Fish shell 2.0 - https://news.ycombinator.com/item?id=5723235 - May 2013 (175 comments)

Fish 2.0 shell beta - https://news.ycombinator.com/item?id=5567639 - April 2013 (56 comments)

Fish: Finally, a command line shell for the 90s - https://news.ycombinator.com/item?id=4073162 - June 2012 (146 comments)

Fish sucks (but your shell sucks more) - https://news.ycombinator.com/item?id=2031110 - Dec 2010 (60 comments)

Fish - The friendly interactive shell - https://news.ycombinator.com/item?id=820677 - Sept 2009 (16 comments)

Fish Shell: A User-Friendly Shell or Like a Heavily Customized zsh - https://news.ycombinator.com/item?id=811113 - Sept 2009 (8 comments)

Strongly agreed here, it really just works. Sure you can get the same with zsh but the hours of my life I've spent tweaking and tuning zsh I'd happily give back because fish is good enough.

When we built our CLI for Crunchy Bridge it was a couple lines to add tab completion to the CLI when running in Fish (https://blog.crunchydata.com/blog/introducing-the-crunchy-br...), love that when building such tooling giving a better end user experience was so simple.

I've been a Fish user for 10 years!

One key thing I like from Fish is their command history feature, where you can use the up/down to move backward/forward the history.

I can't find a way to get this to work in ZSH I don't like having to CTRL+R for going backward (how do you even go forward, I can't remember :D)

I'd rather have a more powerful shell that uses a functional style yet preserves many shell semantics we're all familiar with (like XS, https://github.com/TieDyedDevil/XS , except maintained!) than an easier-to-use shell
Can anyone recommend a "sane zsh defaults" config that I can download and just works with approximately the same features as fish?

(Without having to first learn/spend time about howto setup and configure plugins etc.)

More and more often, I am getting the following error:

Malware and Phishing

This site is blocked because it is a known security threat. Please contact your network administrator to gain access.

My assumption this is because I have Xfinity Business Class and it's blocking the site. But why would I be seeing this so often on a site linked from HN?

Is fish usable for a web/nodejs developer working with the usual libs in the JS ecosystem such as React/Webpack as well as usual github projects?

By that I mean any scripts included in these projects. I have seen only a few scripts though.

Vi mode was not good enough: first thing I do in a new shell is `set -o vi` and then try to do simple things: replace parts of words, copy/paste, search history. Fish in my experience was way worse than zsh and bash. Maybe things changed in the meantime?
Can anyone explain why getting similar functionality in zsh is such a PITA? Every time I've tried to get smart-autocomplete history stuff working in it I've given up. Is it because the community is much more fragmented?
Specific question for anyone who's gone from bash to fish (and maybe back) -- Does the "only splitting on newlines" mess you up? I've just been in bash so long that I feel like this will get me?
I love fish. On any host, if I can just get fish running, I feel 100% at home. I don‘t need a single bit of customization on it.
I've been happy with Fish shell for years!

Yes, I could fiddle and twiddle with settings and configure a nicer shell, but Fish on its default settings on any OS just makes things smooth and easy!

> You can configure your shell using a web interface!

Think about that for a while.

Could someone explain more the video demo? It ran the python interpreter which disappeared, but I didn't quite catch the meaning of this.
Fish is so good I think I'm using shellder and some other bits

But I just use it as a way to run commands, and I use dynamic languages to create scripts just not bash..

> when you type something invalid it’s red, blue when not

Does anyone know how to do something like this with Bash?

I really liked fish when I used it but unfortunately the non-compliance with other shells is just too much hassle given the feature set (autocomplete is cool but I always know when I have python3 vs python4), like not being able to just copy paste “export VAR=…” from the web like I have been my whole life.
I wish I could use fish, but I can't leave the fancy auto complete of kubectl and git
xonsh is also worth a try. I've been using it for a few years now.
zsh has a short form for for loops too:

    for i in *.pdf; echo $i
Shorter than the fish version. Does that mean that it's a better shell then?
Is there a reason fish isn't posix compliant? From my experience (which is rudimentary tbf) there are only detriments due to the lack of sh scripts not working out of the box.
Have you tried Oil Shell? http://www.oilshell.org/
Not for me, it breaks the .sh scripts and have to be rewritten.
Fish is good, but most shells pale in comparison to powershell unfortunately.
> Smart tab completion not only for the commands but for the arguments as well, and it apparently does that by parsing man pages.

And it does this every time you spawn a shell. So if you have set your login shell to fish, then every time you launch a shell it loads all the fish plugins like this one, and that slows it down. And you can’t turn it off, or couldn’t the last time I checked around a year ago. Insult to injury? The PR where this was requested was closed by the devs as “wontfix”.

This, and it’s lack of POSIX compatibility, made me switch back to zsh.

> fish is not POSIX compliant, don’t expect your previous scripts to work at all

Extend, embrace, extinguish?...