= Cd 組込みコマンド
:encoding: UTF-8
:lang: ja
//:title: Yash マニュアル - Cd 組込みコマンド

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

[[syntax]]
== 構文

- +cd [-L|-P] [{{ディレクトリ}}]+

[[description]]
== 説明

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

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

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

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

作業ディレクトリの変更に成功した場合、{zwsp}link:params.html#sv-yash_after_cd[+YASH_AFTER_CD+ 変数]が設定されていればその値がコマンドとして解釈・実行されます (非 link:posix.html[POSIX 準拠モード]時)。

[[options]]
== オプション

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

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

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

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

[[operands]]
== オペランド

{{ディレクトリ}}::
新しい作業ディレクトリのパス名です。絶対パスまたは元の作業ディレクトリからの相対パスで指定します。
+
この値がハイフン一つ (`-') の場合、{zwsp}link:params.html#sv-oldpwd[+OLDPWD+ 変数]の値が指定されたものとみなします。このオペランドが与えられていない場合、{zwsp}link:params.html#sv-home[+HOME+ 変数]の値が指定されたものとみなします (+--default-directory+ オプションを指定した場合を除く)。

[[exitstatus]]
== 終了ステータス

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

[[notes]]
== 補足

Cd コマンドは{zwsp}link:builtin.html#types[準特殊組込みコマンド]です。

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

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

// vim: set filetype=asciidoc expandtab:
