# 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 is available in HTML by using the help command from inside fish, and in the fish-doc(1) 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`. 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: 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.

The `fish` exit status is generally the exit status of the last foreground command.

## Debugging

While fish provides extensive support for debugging fish scripts, 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` 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` and `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`.

## 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 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