「CD」の目的は何ですか?注文する?

「CD」の目的は何ですか?注文する?

このcdコマンドはディレクトリの変更に使用されることを知っています。例えば

 cd dirname

有効なディレクトリ名には、およびも含まれ.ます..。目的cd ..は明らかです。マンページから:

CDPATHの空のディレクトリには、現在のディレクトリと同じ名前( ".")があります。

しかし、これの目的は何ですかcd .

答え1

それがすることは、cd .現在の作業ディレクトリに関する情報でシェルを更新することです。現在のディレクトリ(パス名)がcd

$ pwd
/tmp/shell-bash.OoVntBAM
$ mkdir dir
$ cd dir
$ pwd
/tmp/shell-bash.OoVntBAM/dir

したがって、現在私たちは下のどこかにある/tmpディレクトリにありますdir。現在あるディレクトリの名前を変更します。

$ mv ../dir ../new-dir

では、今どこにいますか?

$ pwd
/tmp/shell-bash.OoVntBAM/dir

本当に?なぜ、それは変です。シェルが私たちが誰であるかを確かに知っておきましょう。

$ cd .
$ pwd
/tmp/shell-bash.OoVntBAM/new-dir

スクリプトでは、cd .ユーザーが現在のディレクトリにまだアクセスできることをテストするために使用できます。

if ! cd . 2>/dev/null; then
    echo lost access to cwd >&2
    exit 1
fi

または逆に、確認する現在のユーザーのアクセス権をキャンセルする一部の操作の後、現在のディレクトリにアクセスできなくなります。

現在のディレクトリへのアクセス権が失われる理由には、ディレクトリの削除または誰かがディレクトリに対する実行権限を削除することが含まれます。


もう1つの例はieを使用しますcd .が、-Pieオプションを使用することですcd -P .。現在のディレクトリがシンボリックリンクを介してアクセスされると、「物理」ディレクトリになります。

$ pwd
/tmp/shell-bash.OoVntBAM
$ mkdir dir
$ ln -s dir link-dir
$ ls -l
total 2
drwxr-xr-x  3 kk  wheel  512 May  8 00:48 dir
lrwxr-xr-x  1 kk  wheel    3 May  8 00:46 link-dir -> dir

これで、ディレクトリdirとそのディレクトリへのシンボリックリンクが作成されました。シンボリックリンクを介してディレクトリに入ります。

$ cd link-dir
$ pwd
/tmp/shell-bash.OoVntBAM/link-dir

それから...

$ cd -P .
$ pwd
/tmp/shell-bash.OoVntBAM/dir

答え2

正しい見積もりは次cd ..のとおりです。

'..' は、前のパス名コンポーネントをスラッシュまたは DIR の先頭に戻すことによって処理されます。

そしてそうです。cd .現在のディレクトリは変更されてはならず、変更されません。
ただし、現在のディレクトリの名前が変更された可能性があります。

$ mkdir thisdir
$ cd thisdir
$ cd .
$ pwd
/home/isaac/thisdir
$ mv ../thisdir ../xxxx
$ cd .
$ pwd
/home/isaac/xxxx

現在のディレクトリにシンボリックリンクが含まれているか、実際のディレクトリ名が変更されました。

$ cd ~/ttt
$ pwd
/home/isaac/ttt
$ cd -P .
$ pwd
/home/isaac/me/init/basicdirs.d/ttt

したがって、cd .他のように使用するとに変更されcd DIRます。同じディレクトリのように見えますが、同じディレクトリでもDIRの名前またはパスが異なる場合があります。pwdDIR

関連情報