Seconded. Having an awesome Fish setup doesn't help at all when you're constantly having to shell into other machines unless you somehow keep your dotfiles synced, and that sounds like a total hassle.
I'd rather my muscle memory be optimized for the standard setup.
Definitely fish. It does everything i need out of the box. To achieve the same with zsh, i needed a dozen plugins on top of a plugin manager. Here, in satisfied with just Starship as custom prompt.
That said, i’ve been trying nushell recently. Don’t really think it’s for me, but it is pretty interesting
Honestly? Bash. I tried a bunch a few years back and eventually settled back on bash.
Fish was really nice in a lot of ways, but the incompatibilities with normal POSIX workflows threw me off regularly. The tradeoff ended up with me moving off of it.
I liked the extensibility of zsh, except that I found it would get slow with only a few bits from ohmyzsh installed. My terminal did cool things but too slowly for me to find it acceptable.
Dash was the opposite, too feature light for me to be able to use efficiently. It didn't even have tab completion. I suffered that week.
Bash sits in a middle ground of usability, performance, and extensibility that just works for me. It has enough features to work well out of the box, I can add enough in my bashrc to ease some workflows for myself, and it's basically instantaneous when I open a terminal or run simple commands.
while I still use ohmyzsh, a lot of it's opponents make it's slowness one of its complaints. You don't need ohmyzsh to have fancy things, it's just makes setting it all up a little easier.
I know I'm a heretic but I'm a huge powershell fan. Once you work with an object-oriented shell you'll wonder why you've dealt with parsing text for so long. Works great on Linux, MacOS and Windows, it's open source, reads and writes csv, json and xml natively, native web and rest service support, built-in support for remote computing and parallel processing and extensive libraries for just about anything you can think of. It takes a little getting used to but it's worth it.
TBH, I use Powershell on my Windows install, and they've made some good improvements over the years. I forget that it also works on Linux.
Shame v1.0 ships with new installations, and you have to manually go out and install the latest versions to get the benefits. Dunno why MS doesn't just automatically update it with everything else.
Version 2 came with Windows 7. Version 5 comes with Windows 10 (and I think 11). V7 is the latest but being cross-platform doesn't come with some of the Windows-specific modules built into v5.
I use powershell by default on windows and I prefer it for scripting any day of the week vs. shell scripts. It's not the fastest but you can always plug in .net to your scripts to dramatically improve performance. Sure, I could write the script in rust or whatever to make it even faster, but that's way more work than I need for the lifespan of the script.
Even on Windows I try to avoid Powershell. I use bash through GitBash there, too. But, I don't mind using Powershell for work, because some workflows are already implemented in ps1-scripts.
Fish for an interactive shell, and I'll often drop back to bash for writing a script. I can never remember how to do basic program flow in fish. Bash scripting is not great, but you can always find an example to remind you of how it goes.
Fish, less config and super easy to set things like path, colors, and the support for dev environments and tooling is better than it was. Used to be a Zsh user, but moved since I distro hop so dang much. Less time to get going.
Nicely configured it's so convenient that I spend most of my time in the terminal and don't even use a file explorer anymore. It can also be expanded with some plugins for specific use-cases.
Eshell because it is consistent cross platform and I switch often for work/etc. Sometimes I’ll use bash when I really want a native shell.
I used fish before eshell and I really like it, the auto complete is nice, but eshell has autocomplete and since aliases and other configurations are in my emacs config, they sync cross platform too.
I always figured that Ksh / POSIX / Bash shell arrays are kept as they are because anyone with a serious need of arrays ought to be using something better than a scripting language.
Not necessarily.
They're a basic data structure used everywhere, most notably with command arguments ( $@ ) and can make shell scripts a viable option for many simple tasks if their syntax makes sense and you don't have to wonder how their expansion works every time you see one being used.
I really like nushell, which has more of a feel and ergonomics of a modern programming language without the idiosyncrasies of traditional shells (so it's obviously not POSIX shell compatible).
One major downside is that it's not yet stable, so breaking changes between releases are expected.
Fish shell. I switched to fish ages ago, back when I didn't know much bash scripting. Now I am just so used to it that I don't wanna switch back. Plus it just works.
Slowly trying to learn sh while using mostly bash. Convenience is nice and all, but when I encounter something like OpenWRT or Android, I don't like the feeling of speaking a foreign language. Maybe if I can get super familiar with sh, then I might explore prettier or more convenient options, but I really want to know how to deal with the most universal shell.
OpenBSD's default public domain kornshell fork on OpenBSD, oksh (portable OpenBSD ksh clone) on Linux/MacOS/Other Unix. It has far fewer extensions than something like Bash (which I consider a positive) while being much faster (tested with hyperfine), and the extensions it does have are all useful (arrays, coprocesses, select, .* not expanding to . or .., pattern blocks, suspending of the whole shell).
fizsh (not fish) is what I actually end up using, as I can't be bothered to copy that config around and retune it for each machine. Gives me the syntactic sugar of zsh with common default options on by default, an OK default prompt, and doesn't break POSIX assumptions like fish. Also Installs quickly from the package manager without needing to run through the zsh setup each time - unlike oh-my-zsh. And if I still need customization, all the zsh options are still there.
Xonsh. For basic use (running CLI programs with arguments) it works like any other shell, and for other uses it has nice Python syntax (and libraries!). For example, I like not needing a separate calculator program, as I can do maths directly in the shell with an intuitive syntax.
I've recently migrated to nushell, I don't straight up recommend it because it's not POSIX compliant, so unless you're already familiar with some other she'll I would not use it.
That being said, it's an awesome shell if you deal with structured data constantly, and that's something I do quite often so for me it's a great tool.
Never used PowerShell, so I didn't know that it was available for Linux nor open source, since from a quick search both of them seem to be true I guess there's no real reason since both are described very similarly.
It's indeed a lot like powershell, but I found it to be much less painful to use for everyday tasks.
I can't really put my finger on it, but powershell always felt very clunky and unpredictable to use.
With Nushell, I can write pipelines that usually have the desired behavior on the first try. Also, its more convenient in so many different aspects that I can't go back anymore.
The biggest downside is, that it hasn't had a stable release yet. While I haven't encountered any bugs yet, there are often breaking changes with new releases that may break your scripts.
Bash. By default it might seem less featureful than zsh.. but bash is a lot more powerful and extensible than some give it credit for. It might be more complex to set it up the way you like it, but once you do it, that configuration can be ported over wherever bash exists (ie. almost everywhere).
Bash, just because everything else already uses it. That and bashisms have infected nearly all of my scripts as I clumsily bump into the limitations of POSIX string manipulation.
I have found some very fun things with sed branching patterns as a result of these limitations though...
At the moment I'm using zsh with powerlevel10k. But powerlevel10k is not really supported anymore, and seems to be basically on life support. While it still works for now, I have been thinking of switching over to fish. But the lack of posix compatibility is holding me back a bit.
xterm is a terminal emulator, not a shell. Anything that produces a terminal-compatible text stream can be started as the first program.
e.g. xterm -e nano, assuming you have the nano editor installed, has no instance of a traditional shell (e.g. bash, zsh) running between the xterm and the editor, but the editor still works.
You could argue that makes the editor itself a shell of sorts, because it's interactive and you can do things with it, but it's still not the xterm that inherits that title.
IDK if federations doesn't work, I already wrote to another response that I use Bash.
Since the Amiga in the 80's I considered CLI windows and Shell as the same thing,because they kind of were on the Amiga, as there was only 1 shell, and a CLI window was also called Shell. But that was obviously a misunderstanding I just never got quite rid of.
I said I prefer zsh. I used terminals like urxvt when I used window managers. Urxvt + zsh works fine. On kde I didn't mind using zsh + konsole. Hope that clears up.
I don't really rate zsh personally. I find the additional features/syntactic sugar it adds are a poor tradeoff for lower portability. I also end up changing the settings in my zshrc to make it behave more like bash.