---
name: "fish"
section: "1"
platform: "linux"
package: "fish"
version: "4.9.3-1"
release: "Arch Linux 2026-11-01"
platforms: ["linux"]
url: "https://new.carta.tech/fish"
---

# fish(1)

the friendly interactive shell

## NAME

fish - the friendly interactive shell

## SYNOPSIS

```
fish [OPTIONS] [FILE [ARG ...]]
fish [OPTIONS] [-c COMMAND [ARG ...]]
```

## DESCRIPTION

**fish** is a command-line shell written mainly with interactive use in mind. This page briefly describes the options for invoking **fish**. The full manual \<#intro\> is available in HTML by using the **help** command from inside fish, and in the *[fish-doc(1)](/fish-doc/1.md)* man page. The tutorial \<\> is available as HTML via **help tutorial** or in *man fish-tutorial*.

The following options are available:

- **-c** or **--command=COMMAND**

  Evaluate the specified commands instead of reading from the commandline. Any additional positional arguments are used as **$argv**.

- **-C** or **--init-command=COMMANDS**

  Evaluate specified commands after reading the configuration but before executing command specified by **-c** or reading interactive input.

- **-d** or **--debug=DEBUG\_CATEGORIES**

  Enables debug output and specify a pattern for matching debug categories. See Debugging below for details.

- **-o** or **--debug-output=DEBUG\_FILE**

  Specifies a file path to receive the debug output, including categories and **fish\_trace** \<#envvar-fish\_trace\>. The default is standard error.

- **-i** or **--interactive**

  The shell is interactive.

- **-l** or **--login**

  Act as if invoked as a login shell.

- **-N** or **--no-config**

  Do not read configuration files.

- **-n** or **--no-execute**

  Do not execute any commands, only perform syntax checking.

- **-p** or **--profile=PROFILE\_FILE**

  when **fish** exits, output timing information on all executed commands to the specified file. This excludes time spent starting up and reading the configuration.

- **--profile-startup=PROFILE\_FILE**

  Will write timing for **fish** startup to specified file.

- **-P** or **--private**

  Enables private mode \<#private-mode\>: **fish** will not access old or store new history.

- **--print-rusage-self**

  When **fish** exits, output stats from getrusage.

- **--print-debug-categories**

  Print all debug categories, and then exit.

- **-v** or **--version**

  Print version and exit.

- **-f** or **--features=FEATURES**

  Enables one or more comma-separated feature flags \<#featureflags\>.

The **fish** exit status is generally the exit status of the last foreground command \<#variables-status\>.

## DEBUGGING

While fish provides extensive support for debugging fish scripts \<#debugging\>, it is also possible to debug and instrument its internals. Debugging can be enabled by passing the **--debug** option. For example, the following command turns on debugging for background IO thread events, in addition to the default categories, i.e. *debug*, *error*, *warning*, and *warning-path*:

```
> fish --debug=iothread
```

Available categories are listed by **fish --print-debug-categories**. The **--debug** option accepts a comma-separated list of categories, and supports glob syntax. The following command turns on debugging for *complete*, *history*, *history-file*, and *profile-history*, as well as the default categories:

```
> fish --debug='complete,*history*'
```

Debug messages output to stderr by default. Note that if **fish\_trace** \<#envvar-fish\_trace\> is set, execution tracing also outputs to stderr by default. You can output to a file using the **--debug-output** option:

```
> fish --debug='complete,*history*' --debug-output=/tmp/fish.log --init-command='set fish_trace on'
```

These options can also be changed via the **FISH\_DEBUG** \<#envvar-FISH\_DEBUG\> and **FISH\_DEBUG\_OUTPUT** \<#envvar-FISH\_DEBUG\_OUTPUT\> variables. The categories enabled via **--debug** are *added* to the ones enabled by $FISH\_DEBUG, so they can be disabled by prefixing them with **-** (**reader-\*,-ast\*** enables reader debugging and disables ast debugging).

The file given in **--debug-output** takes precedence over the file in **FISH\_DEBUG\_OUTPUT** \<#envvar-FISH\_DEBUG\_OUTPUT\>.

## EXAMPLES

To just start fish:

```
fish
```

To run a file with fish:

```
fish /path/to/script.fish
```

To run some commands with fish:

```
fish -c 'echo Hi there!'
```

You can also pass arguments to those commands:

```
> fish -c 'printf %s\n $argv' "first line" "second line"
first line
second line
```

To run a script, except read this other file first:

```
fish --init-cmd "source otherfile" script.fish
```

To profile \<#profiling\> fish's startup and find what takes the most time in your configuration:

```
fish --profile-startup /tmp/start.prof -ic exit
sort -nk2 /tmp/start.prof
```

## Copyright

fish-shell developers
