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

構文

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

説明

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

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

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

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

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

オプション

-L
--logical

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

-P
--physical

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

-e
--ensure-pwd

このオプションは -P (--physical) オプションと一緒に指定する必要があります。 作業ディレクトリが変更された後に、PWD 変数に設定すべき新しい作業ディレクトリパスが特定できない場合、このオプションが指定されていると、終了ステータスが 1 になります。このオプションが指定されていない場合は、終了ステータスが 0 になります。

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

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

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

オペランド

ディレクトリ

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

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

終了ステータス

  • 作業ディレクトリを正しく変更できた場合:

    • -L オプションが有効な場合、終了ステータスは 0 です。

    • -P オプションが有効な場合:

      • PWD 変数に設定すべき新しい作業ディレクトリパスが特定できた場合、終了ステータスは 0 です。

      • PWD 変数に設定すべき新しい作業ディレクトリパスが特定できなかった場合:

        • -e オプションが指定されている場合、終了ステータスは 1 です。

        • -e オプションが指定されていない場合、終了ステータスは 0 です。

  • 内部で呼び出される chdir システムコールがエラーを返した場合、終了ステータスは 2 です。

  • -L オプションが有効で、新しいディレクトリパス名に .. が含まれていて、それが存在しないディレクトリを指している場合、終了ステータスは 3 です。

  • HOME または OLDPWD が未定義もしくは空文字列であるためにディレクトリが解決できなかった場合、終了ステータスは 4 です。

  • コマンドライン引数が不正な場合、終了ステータスは 5 です。

終了ステータスが 2 以上の場合、作業ディレクトリは変更されません。

PWD または OLDPWD 変数が読み取り専用の場合、変数は更新されませんが、これは終了ステータスに影響しません。

補足

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

POSIX には YASH_AFTER_CD 変数および --default-directory=… オプションに関する規定はありません。

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