Introduction¶
This is the documentation forfish, thefriendlyinteractiveshell.
A shell is a program that helps you operate your computer by starting other programs. fish offers a command-line interface focused on usability and interactive use.
Some of the special features of fish are:
Extensive UI:Syntax highlighting,Autosuggestions,tab completion and selection lists that can be navigated and filtered.
No configuration needed: fish is designed to be ready to use immediately, without requiring extensive configuration.
Easy scripting: Newfunctions can be added on the fly. The syntax is easy to learn and use.
This page explains how to install and set up fish and where to get more information.
Where to go?¶
If this is your first time using fish, see thetutorial.
If you are already familiar with other shells like bash and want to see the scripting differences, seeFish For Bash Users.
For an overview of fish’s scripting language, seeThe Fish Language. If it would be useful in a script file, it’s here.
For information on using fish interactively, seeInteractive use. If it’s about key presses, syntax highlighting or anything else that needs an interactive terminal session, look here.
If you need to install fish first, read on, the rest of this document will tell you how to get, install and configure fish.
Installation¶
This section describes how to install, uninstall, start, and exitfish. It also explains how to make fish the default shell.
Installation¶
Up-to-date instructions for installing the latest version of fish are on thefish homepage.
To install the development version of fish, see the instructions on theproject’s GitHub page.
Starting and Exiting¶
Once fish has been installed, open a terminal. If fish is not the default shell:
Typefish to start a shell:
>fish
Typeexit to end the session:
>exit
Default Shell¶
There are multiple ways to switch to fish (or any other shell) as your default.
The simplest method is to set your terminal emulator (eg GNOME Terminal, Apple’s Terminal.app, or Konsole) to start fish directly. See its configuration and set the program to start to/usr/local/bin/fish
(if that’s where fish is installed - substitute another location as appropriate).
Alternatively, you can set fish as your login shell so that it will be started by all terminal logins, including SSH.
Warning
Setting fish as your login shell may cause issues, such as an incorrectPATH
. Some operating systems, including a number of Linux distributions, require the login shell to be Bourne-compatible and to read configuration from/etc/profile
. fish may not be suitable as a login shell on these systems.
To change your login shell to fish:
Add the shell to
/etc/shells
with:>echo/usr/local/bin/fish|sudotee -a /etc/shells
Change your default shell with:
>chsh-s /usr/local/bin/fish
Again, substitute the path to fish for/usr/local/bin/fish
- seecommand-sfish
inside fish. To change it back to another shell, just substitute/usr/local/bin/fish
with/bin/bash
,/bin/tcsh
or/bin/zsh
as appropriate in the steps above.
Uninstalling¶
For uninstalling fish: seeFAQ: Uninstalling fish.
Shebang Line¶
Because shell scripts are written in many different languages, they need to carry information about which interpreter should be used to execute them. For this, they are expected to have a first line, the shebang line, which names the interpreter executable.
A script written inbash would need a first line like this:
#!/bin/bash
When the shell tells the kernel to execute the file, it will use the interpreter/bin/bash
.
For a script written in another language, just replace/bin/bash
with the interpreter for that language. For example:/usr/bin/python
for a python script, or/usr/local/bin/fish
for a fish script, if that is where you have them installed.
If you want to share your script with others, you might want to useenv to allow for the interpreter to be installed in other locations. For example:
#!/usr/bin/env fishechoHello from fish$version
This will callenv
, which then goes throughPATH
to find a program called “fish”. This makes it work, whether fish is installed in (for example)/usr/local/bin/fish
,/usr/bin/fish
, or~/.local/bin/fish
, as long as that directory is inPATH
.
The shebang line is only used when scripts are executed without specifying the interpreter. For functions inside fish or when executing a script withfish/path/to/script
, a shebang is not required (but it doesn’t hurt!).
When executing files without an interpreter, fish, like other shells, tries your system shell, typically/bin/sh
. This is needed because some scripts are shipped without a shebang line.
Configuration¶
To store configuration write it to a file called~/.config/fish/config.fish
.
.fish
scripts in~/.config/fish/conf.d/
are also automatically executed beforeconfig.fish
.
These files are read on the startup of every shell, whether interactive and/or if they’re login shells. Usestatus--is-interactive
andstatus--is-login
to do things only in interactive/login shells, respectively.
This is the short version; for a full explanation, like for sysadmins or integration for developers of other software, seeConfiguration files.
If you want to see what you changed over fish’s defaults, seefish_delta.
Examples:¶
To add~/linux/bin
to PATH variable when using a login shell, add this to~/.config/fish/config.fish
file:
ifstatus--is-loginset-gx PATH$PATH~/linux/binend
This is just an example; usingfish_add_path e.g.fish_add_path~/linux/bin
which only adds the path if it isn’t included yet is easier.
To run commands on exit, use anevent handler that is triggered by the exit of the shell:
functionon_exit --on-event fish_exitechofish is now exitingend
Resources¶
TheGitHub page
The officialGitter channel
The official mailing list atfish-users@lists.sourceforge.net
If you have an improvement for fish, you can submit it via the GitHub page.