CD(1) fish-shell CD(1)

# [NAME](#NAME)

cd - change directory

# [SYNOPSIS](#SYNOPSIS)

```
cd [( -L | --no-dereference ) | ( -P | --dereference )] [DIRECTORY]
```

# [DESCRIPTION](#DESCRIPTION)

NOTE: This page documents the fish builtin **cd**. To see the documentation on any non-fish versions, use **command man cd**.

**cd** changes the current working directory.

The **PWD** &lt;#envvar-PWD&gt; environment variable is updated with the new working directory, and the previous directory is added to the directory history &lt;#directory-history&gt;.

If *DIRECTORY* is given, it will become the new directory. If no parameter is given, the **HOME** &lt;#envvar-HOME&gt; environment variable will be used.

If *DIRECTORY* is a relative path, all the paths in the **CDPATH** &lt;#envvar-CDPATH&gt; will be tried as prefixes for it, in addition to **PWD** &lt;#envvar-PWD&gt;. It is recommended to keep **.** as the first element of **CDPATH** &lt;#envvar-CDPATH&gt;, or **PWD** &lt;#envvar-PWD&gt; will be tried last.

The new directory name is partially resolved to remove redundant segments (**.** or **..**).

**cd** defaults to treating symbolic links as real directories, and not resolving them to their underlying targets. The **$PWD** special variable &lt;#variables-special&gt; variable will contain the path that was supplied. This default behaviour can be enforced with the **-L** or **--no-dereference** option.

The **-P** or **--dereference** option resolves all symbolic links first. This was the default in fish versions before 3.0.0.

fish will also try to change directory if given a command that looks like a directory (starting with **.**, **/** or **~**, or ending with **/**), without explicitly requiring **cd**.

fish also ships a wrapper function around the builtin **cd** that understands **cd -** as changing to the previous directory. See also prevd &lt;&gt;. This wrapper function maintains a history of the 25 most recently visited directories in the **$dirprev** and **$dirnext** global variables. If you make those universal variables your **cd** history is shared among all fish instances.

As a special case, **cd .** is equivalent to **cd $PWD**, which is useful in cases where a mountpoint has been recycled or a directory has been removed and recreated.

The **--help** or **-h** option displays help about using this command, and does not change the directory.

# [EXAMPLES](#EXAMPLES)

```
cd
# changes the working directory to your home directory.
cd /usr/src/fish-shell
# changes the working directory to /usr/src/fish-shell
cd -P /tmp/link
# resolves /tmp/link to its target before recording the directory
```

# [SEE ALSO](#SEE_ALSO)

Navigate directories using the directory history &lt;#directory-history&gt; or the directory stack &lt;#directory-stack&gt;

# [Copyright](#Copyright)

fish-shell developers

September 9, 2026 4.9

---

Document: cd(1) from fish 4.9.3-r0 (Chainguard OS)
Source: https://github.com/fish-shell/fish-shell
