Bash is the default shell in Ubuntu, and honestly? There’s nothing wrong with it. But if you spend a lot of time in the terminal, it can be worth trying out alternative shells as they often provide subtle creature comforts you’ll wonder how you did without.
After all, a hermit crab regularly changes its shell, why shouldn’t canny Linux users do the same? (Not that I’m implying you’re a crab, of course.)
Fish (which stands for Friendly Interactive Shell) is a Bash alternative written in Rust (previously C++). It is billed by its creators as “a command line shell for the 90s”. It’s free, open-source software and works on all Unix systems, not only Linux.
What sets it apart from other shells is a set of of features that make working in an Ubuntu terminal less frustrating: it highlights syntax errors before you hit enter, suggests commands based on your history, and provides genuinely helpful tab completion.
None of those are essentials – not to everyone. But compared to basic Bash they often feel like superpowers.
What Fish brings to the table
Fish highlights commands as you type them. Valid commands appear in blue, invalid ones in red, and different parts of commands are given distinct colours. This allows you to catch typos early, and it makes lengthy or complex commands a little easier to read.
Personally, I find the auto-suggestions the biggest boon. This shows potential command completions in grey text as you type, with suggestions pulled from your own command history:
If you run long commands often but rarely remember them in full, this feature saves you time – no need to muscle-memory mash the up arrow key to find it again.
I have verbose ffmpeg commands I run often, only swapping the file paths. With Fish I need to only type ffmpegand—bam, my go-to stream of flags, arguments, variables and settings is suggested as a match I can hit the right arrow key to accept.
Otherwise, I can keep typing whatever it is I want to run.
Similarly, you can create abbreviations in Fish. These are custom shortcuts that expand to the full command when you type them (like a text expander). For frequently run, lengthy commands these abbreviations are a real time saver.
Tab completion in fish on a whole other level to what Bash offers:
When you hit tab, Fish will list possible options alongside brief descriptions of what they are or what they do. This makes it easier to learn about commands or packages (even by osmosis) without you needing to run --help or open man pages.
A web-based configuration tool makes it easy to personalise and fine-tune the Fish Shell to your tastes.
Run fish_config and it opens a page in your default browser. From there, you can adjust colours, view functions, variable, sift through your recent command history, and adjust other aspects without needing to open a config file in a text editor (but you can do that).
You can customise the prompt1 (the bit with your username, hostname and current directory) by picking a preset or creating your own. For Linux aesthetes, a bespoke prompt makes a great ‘finishing touch’ to desktop personalisation.
Beyond that, Fish does a few things Bash does differently (for the better).
For example, you enter command substitutions in parenthesis (brackets) rather than ` (backticks); exit status of the last command is stored in $status not $?; you define variables using dedicated commands like set, rather than cryptic syntax.
A full list of those differences can be found on the website tutorial as well as the dedicated Fish for Bash users page.
Those are not all of the features Fish offers, but ones I find make it a veritable catch. If you fancy taking the plunge with it, good news: Fish is available in Ubuntu’s repositories, so it’s easy to install.
How to Install Fish on Ubuntu
You can install Fish on Ubuntu directly from the repos. Ubuntu 24.04 LTS repos provides the C++ version (3.x) while the version in 25.04 is the new Rust-based (4.x) series:
sudo apt install fish
For the latest version, use the official Fish PPA which supports Ubuntu 22.04 LTS and later:
sudo apt-add-repository ppa:fish-shell/release-4
sudo apt update && sudo apt install fish
Once installed, start Fish by typing fish in your terminal emulator of choice.
After sampling it, if you want to make Fish your default shell on Ubuntu, run:
chsh -s /usr/bin/fish
You’ll need to log out and back in for that change to take effect, however.
Be careful using chsh as it’s possible to end up temporarily locked out of your shell if you fudge the path. If this happens, it is recoverable via a rescue shell, or another login method. Being careful from the off will, however, save any headaches.
Compatibility considerations
Fish works well for interactive terminal use, but it’s not POSIX-compliant. That’s a fancy way of saying some Bash scripts, mainly those relying on specific Bash-only syntax, won’t run directly (not without modification).
How much that will affect day-to-day terminal work will vary on your particular use case(s). But, at worst, Bash is a command away, ready to use as/if needed – just run bash inside of Fish to use it.
Resource-conscious users may wish to know Fish uses more memory than Bash, mainly owing to its additional features. That sounds like a drawback but it’s not. On modern systems, Fish’s higher memory increase amounts to a minnow-esque 4MB.
Take the bait?
If you’re an Ubuntu user who doesn’t use the terminal often and relies on just a handful of short, simple commands, there’s no compelling need to switch. Bash is basic, but basic is all most people need.
But if you do use the command line regularly, and use it to do more than run apt commands, then switching to Fish can make your workflow faster, reduce friction effort, and (for sloppy typists) help avoid frustrating errors.
It’s still just a shell, albeit a smarter one: Fish is like Bash with a brain.
As the strap-line on the official website touts, it does deliver a modern terminal experience (well, as modern as terminal shells can be) simply by offering a polished, thoughtful and integrated set of features to make command-line tasks less monotonous.
