はじめに

これは、フレンドリーでインタラクティブなシェル(friendly interactive shell)、 fish のドキュメントです。

シェルとは、他のプログラムを起動することでコンピュータの操作を補助するプログラムです。fish は、ユーザビリティと対話的な利用に重点を置いたコマンドラインインターフェースを提供します。

fish の主な特徴は以下の通りです:

  • 充実した UI: シンタックスハイライトサジェスチョン(autosuggestions)タブ補完 、そして移動やフィルタリングが可能な選択リストを備えています。

  • 設定不要: fish は、膨大な設定を必要とせず、インストールしてすぐに使えるように設計されています。

  • 簡単なスクリプティング: 新しい 関数 をその場で追加できます。構文は学習しやすく、使いやすいものです。

このページでは、fish のインストールとセットアップ方法、および詳細な情報の入手先について説明します。

Where to go?

If this is your first time using fish, see the tutorial.

If you are already familiar with other shells like bash and want to see the scripting differences, see Fish For Bash Users.

For an overview of fish's scripting language, see The Fish Language. If it would be useful in a script file, it's here.

For information on using fish interactively, see Interactive 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.

Setup

This section describes how to install, uninstall, start, and exit fish. It also explains how to make fish the default shell.

Installation

Up-to-date instructions for installing the latest version of fish are on the fish homepage.

To install the development version of fish, see the instructions on the project's GitHub page.

Starting and Exiting

Once fish has been installed, open a terminal. If fish is not the default shell:

  • Type fish to start a shell:

    > fish
    
  • Type exit 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 (e.g. 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 (the exact path depends on how you installed fish).

Alternatively, you can set fish as your login shell so that it will be started by all terminal logins, including SSH.

警告

Setting fish as your login shell may cause issues, such as an incorrect PATH. 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:

  1. Add the shell to /etc/shells with:

    > command -v fish | sudo tee -a /etc/shells
    
  2. Change your default shell with:

    > chsh -s "$(command -v fish)"
    

To change it back to another shell, substitute fish with bash, tcsh or zsh as appropriate in the above command.

Uninstalling

For uninstalling fish: see FAQ: 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 in bash 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 use env to allow for the interpreter to be installed in other locations. For example:

#!/usr/bin/env fish
echo Hello from fish $version

This will call env, which then goes through PATH 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 in PATH.

The shebang line is only used when scripts are executed without specifying the interpreter. For functions inside fish or when executing a script with fish /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 before config.fish.

These files are read on the startup of every shell, whether interactive and/or if they're login shells. Use status --is-interactive and status --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, see Configuration files.

If you want to see what you changed over fish's defaults, see fish_delta.

Examples:

To add ~/linux/bin to PATH variable when using a login shell, add this to ~/.config/fish/config.fish file:

if status --is-login
    set -gx PATH $PATH ~/linux/bin
end

This is just an example; using fish_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 an event handler that is triggered by the exit of the shell:

function on_exit --on-event fish_exit
    echo fish is now exiting
end

Resources

If you have an improvement for fish, you can submit it via the GitHub page.

Other help pages