Fish – A Friendly Interactive Shell

Fish — A Friendly Interactive Shell

Are you looking for an alternative to bash? Are you looking for something more user-friendly? Then look no further because you just found the golden fish!

Fish (friendly interactive shell) is a smart and user-friendly command line shell that works on Linux, MacOS, and other operating systems. Use it for everyday work in your terminal and for scripting. Scripts written in fish are less cryptic than their equivalent bash versions.

Fish’s user-friendly features

  • Suggestions
    Fish will suggest commands that you have written before. This boosts productivity when typing same commands often.
  • Sane scripting
    Fish avoids using cryptic characters. This provides a clearer and friendlier syntax.
  • Completion based on man pages
    Fish will autocomplete parameters based on the the command’s man page.
  • Syntax highlighting
    Fish will highlight command syntax to make it visually friendly.

Installation

Fedora Workstation

Use the dnf command to install fish:

$ sudo dnf install fish

Make fish your default shell by installing the util-linux-user package and then running the chsh (change shell) command with the appropriate parameters:

$ sudo dnf install util-linux-user
$ chsh -s /usr/bin/fish

You will need to log out and back in for this change to take effect.

Fedora Silverblue

Because this is not GUI application, you will need to layer it using rpm-ostree. Use the following command to install fish on Fedora Silverblue:

$ rpm-ostree install fish

On Fedora Silverblue you will need to reboot your PC to switch to the new ostree image.

If you want to make fish your main shell on Fedora Silverblue, the easiest way is to update the /etc/passwd file. Find your user and change /bin/bash to /usr/bin/fish.

You will need root privileges to edit the /etc/passwd file. Also you will need to log out and back in for this change to take effect.

Configuration

The per-user configuration file for fish is ~/.config/fish/config.fish. To make configuration changes for all users, edit /etc/fish/config.fish instead.

The per-user configuration file must be created manually. The installation scripts will not create ~/.config/fish/config.fish.

Here are a couple configuration examples shown alongside their bash equivalents to get you started:

Creating aliases

  • ~/.bashrc:
    alias ll='ls -lh'
  • ~/.config/fish/config.fish:
    alias ll='ls -lh'

Setting environment variables

  • ~/.bashrc:
    export PATH=$PATH:~/bin
  • ~/.config/fish/config.fish:
    set -gx PATH $PATH ~/bin

Working with fish

When fish is configured as your default shell, the command prompt will look similar to what is shown in the below image. If you haven’t configured fish to be your default shell, just run the fish command to start it in your current terminal session.

As you start typing commands, you will notice the syntax highlighting:

Cool, isn’t it? 🙂

You will also see commands being suggested as you type. For example, start typing the previous command a second time:

Notice the gray text that appears as you type. The gray text is fish suggesting the command you wrote before. To autocomplete it, just press CTRL+F.

Get argument suggestions based on the preceding command’s man page by typing a dash () and then the TAB key:

If you press TAB once, it will show you the first few suggestions (or every suggestion, if there are only a few arguments available). If you press TAB a second time, it will show you all suggestions. If you press TAB three times consecutively, it will switch to interactive mode and you can select an argument using the arrow keys.

Otherwise, fish works similar to most other shells. The remaining differences are well documented. So it shouldn’t be difficult to find other features that you may be interested in.

Make fish even more powerful

Make the fish even more powerful with powerline. Powerline adds command execution time, colored git status, current git branch and much more to fish’s interface.

Before installing powerline for fish, you must install Oh My Fish. Oh My Fish extends fish’s core infrastructure to enable the installation of additional plugins. The easiest way to install Oh My Fish is to use the curl command:

> curl -L https://get.oh-my.fish | fish

If you don’t want to pipe the installation commands directly to curl, see the installation section of Oh My Fish’s README for alternative installation methods.

Fish’s powerline plugin is bobthefish. Bobthefish requires the powerline-fonts package.

On Fedora Workstation:

> sudo dnf install powerline-fonts

On Fedora Silverblue:

> rpm-ostree install powerline-fonts

On Fedora Silverblue you will have to reboot to complete the installation of the fonts.

After you have installed the powerline-fonts package, install bobthefish:

> omf install bobthefish

Now you can experience the full awesomeness of fish with powerline:

Additional resources

Check out these web pages to learn even more about fish:

Fedora Project community

11 Comments

  1. Martin Sehnoutka

    Fish is really awesome :), but is it safe to modify /etc/passwd with a shell that is incompatible with bash? The last time I tried something broke so I decided to only configure my terminal emulator to start fish instead of the default shell.

    • Sebastiaan Franken

      The shell doesn’t edit. The program (chsh) does, the only thing the shell does is invoke that program, nothing more.

      If something broke in the past is probably bad luck, or a bad program. Chsh is old as nails though, so you can safely assume it’ll do it’s job without killing your install.

  2. Eduard Lucena

    I have 2 questions:

    1.- How do I install it without enabling modules?
    2.- What is ofm?

    • xr

      omf is OhMyFish’s plugin manager.

    • Look at the official site, there is guide for installation from source or directly from git.
      omf is OhMyFish, which I described earlier in the article.

  3. ee3w

    instaling trought runing bash are extremely dangerous!

    curl -L https://web | bash

  4. AsciiWolf

    Do not edit /etc/passwd manually, it is always a bad idea that can break your system! You can use lchsh on Silverblue.

  5. someSay

    Fish is great, I use it for years 🙂 Some additions to that article:

    dnf installs fish from modularity by default, which is bad because it only contains version 3.0. The fedora-updates repo already contains the latest and greatest fish 3.1 which comes with a lots of improvements. No need to build from source. Better do:
    dnf module disable fish
    dnf distro-sync fish

    One can create aliases, e.g. for ll=’ls -lh’ but this is not necessary in this case. Fish has an ll wrapper function shipped by default for this common scenario. One of the things that makes fish great 🙂

    While the ability of parsing man pages for completions is cool, the cd completion isn’t derived from the man page. It’s an explicitly written completion script among many others. Have a look at different completion scripts written for fish. They are much more readable than for bash.

    For starters, I highly recommend going through the tutorial linked in the article. It explains further niceties.

  6. Rafael

    Hi,

    first everything looks very nice with colorful syntax, but sadly, now I have to put expressions like URLs or with blank separated words into “-Quotes.

    I am used not to do this since over 10 years.

    Is it possible to use fish but without using “-Quotes, like in bash?

    Thanks

Comments are Closed

The opinions expressed on this website are those of each author, not of the author's employer or of Red Hat. Fedora Magazine aspires to publish all content under a Creative Commons license but may not be able to do so in all cases. You are responsible for ensuring that you have the necessary permission to reuse any work on this site. The Fedora logo is a trademark of Red Hat, Inc. Terms and Conditions