Fish – A Smart and User-Friendly Interactive Shell for Linux

The Friendly Interactive Shell which is commonly called and abbreviated as FISH is a shell for UNIX and UNIX-like operating systems. It is released under GNU General Public License v2.

FISH is a user-friendly, interactive shell designed to work with any other Linux shell like bash or ZSH. It is designed in such a way that users get powerful features that are easy to discover, remember, and use.

Unlike other shell which disables various features by default to save system resources, FISH keeps all of them enabled by default so that you can make the most out of it.

Features of FISH

Here are some key features of the Fish shell:

  • Interactive and User-Friendly – Fish aims to be easy for beginners and comfortable for experienced users.
  • Syntax Highlighting – Fish shell provides syntax highlighting for commands, making it easier to distinguish between different parts of a command and identify errors.
  • Auto-Suggestions – Fish suggests commands and arguments as you type, based on your command history and the available system commands. This can help speed up command entry and reduce errors.
  • Powerful Tab Completion – Fish provides intelligent tab completion, making it easier to complete commands, file paths, and other elements in a command line.
  • Scripting Language – Fish comes with its own scripting language that is designed to be more straightforward than those of other shells.
  • No Need for External Plugins – Fish has a rich set of built-in functions, reducing the need for external plugins. It aims to provide a comprehensive set of features out of the box.
  • Universal Variables – Fish supports universal variables, which can be shared across different sessions.
  • Rich Set of Built-In Commands – Fish includes a variety of useful built-in commands that simplify common tasks, reducing the reliance on external programs.

You can try fish in your web browser before installing it on your Linux systems.

Install Fish Shell in Linux

Fish packages can be installed on all Linux distributions using Fish repositories, the best way is to add the repository to your system package manager using the following steps as per your distributions:

Install Fish Shell On Debian

Add the following repository to Debian and install manually as shown.

---------------- On Debian 12 ----------------
echo 'deb http://download.opensuse.org/repositories/shells:/fish:/release:/3/Debian_12/ /' | sudo tee /etc/apt/sources.list.d/shells:fish:release:3.list
curl -fsSL https://download.opensuse.org/repositories/shells:fish:release:3/Debian_12/Release.key | gpg --dearmor | sudo tee /etc/apt/trusted.gpg.d/shells_fish_release_3.gpg > /dev/null
sudo apt update
sudo apt install fish
---------------- On Debian 11 ----------------
echo 'deb http://download.opensuse.org/repositories/shells:/fish:/release:/3/Debian_11/ /' | sudo tee /etc/apt/sources.list.d/shells:fish:release:3.list
curl -fsSL https://download.opensuse.org/repositories/shells:fish:release:3/Debian_11/Release.key | gpg --dearmor | sudo tee /etc/apt/trusted.gpg.d/shells_fish_release_3.gpg > /dev/null
sudo apt update
sudo apt install fish
---------------- On Debian 10 ----------------
echo 'deb http://download.opensuse.org/repositories/shells:/fish:/release:/3/Debian_10/ /' | sudo tee /etc/apt/sources.list.d/shells:fish:release:3.list
curl -fsSL https://download.opensuse.org/repositories/shells:fish:release:3/Debian_10/Release.key | gpg --dearmor | sudo tee /etc/apt/trusted.gpg.d/shells_fish_release_3.gpg > /dev/null
sudo apt update
sudo apt install fish

Install Fish Shell On Ubuntu and Linux Mint

On Ubuntu and Linux Mint (all supported releases) execute the following commands:

sudo apt-add-repository ppa:fish-shell/release-3
sudo apt update
sudo apt install fish

Install Fish Shell On Fedora

On Fedora run the following commands as root.

---------------- On Fedora 39 ----------------
dnf config-manager --add-repo https://download.opensuse.org/repositories/shells:fish:release:3/Fedora_39/shells:fish:release:3.repo
dnf install fish
---------------- On Fedora 38 ----------------
dnf config-manager --add-repo https://download.opensuse.org/repositories/shells:fish:release:3/Fedora_38/shells:fish:release:3.repo
dnf install fish
---------------- On Fedora 37 ----------------
dnf config-manager --add-repo https://download.opensuse.org/repositories/shells:fish:release:3/Fedora_37/shells:fish:release:3.repo
dnf install fish

Install Fish Shell On CentOS

On CentOS-9 Stream, run the following commands as root:

cd /etc/yum.repos.d/
wget https://download.opensuse.org/repositories/shells:fish:release:3/CentOS-9_Stream/shells:fish:release:3.repo
yum install fish

Install Fish Shell On RHEL

On RHEL distributions, run the following commands as root:

sudo dnf install fish

Install Fish Shell On Arch Linux

For Arch and Arch-based distributions, you can run the following command to install fish.

pacman -S fish

How to Use Fish Shell in Linux

1. The first time when you start fish, you should see this on the terminal:

fish

Start Fish Shell

2. Check the version of the fish installed.

echo $FISH_VERSION

Check Fish Version

3. See how auto-suggestion is working in FISH.

date
Desktop
locale
...

Fish Auto Suggestion

4. Call for help and you will get help in your default HTTP web browser.

help
Fish Shell Help
Fish Shell Help

5. Use Advanced Tab auto-completion followed by an incomplete string/command.

tty

Advance Auto Suggestion

6. Syntax highlighting as user type:

/usr/bin/calendar

Fish Syntax Highlighting

7. Intelligent color selection automatically in real-time.

echo "I am loving FISH <3"

Fish Shell Color Selection

8. You can check the exit status of the last run command.

echo $status

Check Command Exit Status

9. Make FISH your default shell.

chsh -s /usr/bin/fish

Enter password when prompted.

Set Fish Shell Default

To switch back to your Previous shell do.

chsh -s /bin/bash

If any other shell was your default shell replace ‘/bin/bash’ with your shell. For example, if it was zsh does:

chsh -s /bin/zsh

Caution: Check twice the path of your shell before entering. If you accidentally enter the wrong path to a shell you will be thrown out of the shell, If you do this with your admin account, you will need to reset the admin password and then change the shell. To get rid of these hassles be extra-caution.

This shell provides output lucidly and interactively that will change the way you look at Linux Shell. So much of colors, indention, highlighting of codes, auto-completion, suggestions, and other features let you concentrate on what you want to achieve and not how to achieve it. This shell has been honored by being added as my default shell for my work machine. FISH is an example to those who say the Linux command-line is boring.

If You are an avid Linux user and a fan of the Linux command line. This Shell is worth giving a try and it won’t disappoint you. You may like to share your experience with FISH in the comments below. Don’t forget to provide us with your valuable feedback in the comments below. Like and share us to help us get spread.

Hey TecMint readers,

Exciting news! Every month, our top blog commenters will have the chance to win fantastic rewards, like free Linux eBooks such as RHCE, RHCSA, LFCS, Learn Linux, and Awk, each worth $20!

Learn more about the contest and stand a chance to win by sharing your thoughts below!

Ravi Saive
I am an experienced GNU/Linux expert and a full-stack software developer with over a decade in the field of Linux and Open Source technologies

Each tutorial at TecMint is created by a team of experienced Linux system administrators so that it meets our high-quality standards.

Join the TecMint Weekly Newsletter (More Than 156,129 Linux Enthusiasts Have Subscribed)
Was this article helpful? Please add a comment or buy me a coffee to show your appreciation.

15 Comments

Leave a Reply
    • @Jay,

      Thanks for the heads-up! I’ve updated the instructions to be compatible with Fedora 39.

      If you have any more feedback or questions, feel free to let me know.

      Reply
  1. The point 8, check status of last run, is supposed that is an special feature of Fish? Because in bash is so simple as “echo $?”. It’s great that there are more tools, but I think that is more important to learn to use they.

    Reply
    • @Gerardo,

      No I don’t think so it’s special features of Fish, but I can say every tool has different way of achieving same results…

      Reply
  2. $ sudo add-apt-repository ppa:fish-shell/nightly-master
    $ sudo apt-get update
    $ sudo apt-get install python-software-properties
    $ sudo add-apt-repository ppa:fish-shell/nightly-master
    $ sudo apt-get update
    $ sudo apt-get install fish

    What? You don’t need python software properties at all and don’t need add the ppa twice. This one-liner is enough:
    sudo sh -c ‘add-apt-repository ppa:fish-shell/nightly-master && apt-get update && apt-get install fish’

    Reply
    • @Jakub,

      Thanks for your finding, yes we don’t need Python properties and also no need of adding twice PPA as shown in the article. As per you findings, we’ve updated the article..

      Reply
    • @Derek,

      Thanks for sharing the tool with us, we will definitely have a look and if possible will add a small description about this tool in this article..

      Also is there any difference between Fish and Oh My Fish? could you elaborate more on this? if it’s difference than each other, better could you provide a article on this so that we can publish it under your name on TecMint..

      Reply
  3. Hi,

    Thanks for this great article.

    Pleas check the spelling.

    “If you does this” should say “If you do this”.

    Regards,
    Ignacio

    Reply

Got Something to Say? Join the Discussion...

Thank you for taking the time to share your thoughts with us. We appreciate your decision to leave a comment and value your contribution to the discussion. It's important to note that we moderate all comments in accordance with our comment policy to ensure a respectful and constructive conversation.

Rest assured that your email address will remain private and will not be published or shared with anyone. We prioritize the privacy and security of our users.