# Cd 組込みコマンド

Cd 組込みコマンドはシェルの作業ディレクトリを変更します。

## 構文

- `cd [-L|-P] [ディレクトリ]`

## 説明

Cd コマンドはシェルの作業ディレクトリをオペランドで指定したディレクトリに変更します。

新しい作業ディレクトリに応じて `PWD` 変数の値が再設定されるとともに、前の `PWD` 変数の値が `OLDPWD` 変数に設定されます。新しい `PWD` の値は `.` や `..` のディレクトリ成分を含みません (POSIX 準拠モードで新しいパスが `/..` で始まる場合を除く)。

指定したディレクトリが相対パスの場合 (最初が `.` または `..` で始まるものを除く)、​コマンドの検索における `PATH` 変数の検索と同様にして、​`CDPATH` 変数の値にあるコロンで区切った各ディレクトリ内に指定したディレクトリがあるかどうか調べます。ディレクトリが見つかった場合は、そのディレクトリが新しい作業ディレクトリになります。見つからなかった場合は、ディレクトリは現在の作業ディレクトリからの相対パスとなります。

`CDPATH` 変数の検索で新しい作業ディレクトリが見つかった場合またはディレクトリとして `-` が指定された場合は新しい作業ディレクトリのパスを標準出力に出力します。

作業ディレクトリの変更に成功した場合、​`YASH_AFTER_CD` 変数が設定されていればその値がコマンドとして解釈・実行されます (非 POSIX 準拠モード時)。

## オプション

`-L`
`--logical`

  ディレクトリパスに含まれるシンボリックリンクを解決せずに新しい作業ディレクトリを決定します。新しい `PWD` 変数の値にはシンボリックリンクになっているパス名コンポーネントがそのまま残ります。

`-P`
`--physical`

  ディレクトリパスに含まれるシンボリックリンクを解決します。新しい `PWD` 変数の値はシンボリックリンクを含みません。

`--default-directory=ディレクトリ`

  ディレクトリオペランドが与えられていない場合は、代わりにこのオプションで指定したディレクトリを新しい作業ディレクトリとします。

`-L` (`--logical`) オプションと `-P` (`--physical`) オプションの両方を指定した場合、後に指定したほうを優先します。どちらも指定していない場合は、`-L` を指定したものとみなします。

## オペランド

ディレクトリ

  新しい作業ディレクトリのパス名です。絶対パスまたは元の作業ディレクトリからの相対パスで指定します。

  この値がハイフン一つ (「-」) の場合、​`OLDPWD` 変数の値が指定されたものとみなします。このオペランドが与えられていない場合、​`HOME` 変数の値が指定されたものとみなします (`--default-directory` オプションを指定した場合を除く)。

## 終了ステータス

作業ディレクトリを正しく変更できた場合、終了ステータスは 0 です。エラーがあると終了ステータスは非 0 です。

## 補足

Cd コマンドは​必須組込みコマンドです。

POSIX には `YASH_AFTER_CD` 変数および `--default-directory=…` オプションに関する規定はありません。POSIX はディレクトリとしてハイフン一つを指定したときに `-L` または `-P` オプションを併用することを認めていません。

`YASH_AFTER_CD` 変数の実行結果は cd コマンドの終了ステータスには影響しません。