UNIX - cd
カレントディレクトリを変更する。シェルの内部コマンド
cd カレントディレクトリを変更する。シェルの内部コマンド
- カレントディレクトリとは、「今
自分がいるディレクトリ」のこと。
移動したいディレクトリを引数で指定すると、そのディレクトリに移動する。
% pwd (現在のカレントディレクトリは
/home/hogehoge)
/home/hogehoge
% cd lib
%
pwd
/home/hogehoge/lib
% cd /usr/local
%
pwd
/usr/local
引数なしで起動するとホームディレクトリに移動する。
% cd (引数を省略すると、ホームディレクトリへ)
%
pwd
/home/hogehoge
% cd ..
(「..」は「一つ上のディレクトリ」を意味する)
/home
引数に「-」を指定すると、一つ前のディレクトリに戻る。ただし、2個以上前のディレクトリまでさかのぼって移動することはできない。
% cd /dir1
% cd /dir2
%
pwd
/dir2
% cd -
%
pwd
/dir1
% cd -
%
pwd
/dir2
カレントディレクトリは各プロセス固有の情報である。シェルからあるコマンドを実行し、その中でカレントディレクトリを変更しても、シェル自体のカレントディレクトリは移動しない。つまり、
#!/bin/sh
cd
/
というスクリプトをシェル上から実行しても、シェル自体のカレントディレクトリは変わらないということ。どうしてもというなら、
#!/bin/sh
echo cd /
として、
% eval `hoge.sh`
(バッククォートで囲む)
とすればよい。
また、カレントディレクトリは各プロセス固有の情報であるということを利用して、
% (cd /foo; tar zcf archive.tgz
.)
などとすると、シェルのカレントディレクトリを変えずに /foo
以下のアーカイブを作成することが
できる。カッコで括った部分は別のシェル (子プロセス)
として実行されるので、カッコ内でどれだけカレントディレクトリを変更しても、現在のシェルには影響がない。
なお、これは
% pushd /foo; tar zcf archive.tgz . ; popd
% cd /foo; tar
zcf archive.tgz . ; cd -
と等価である。
(コマンド chdir,
pwd,
mv,
cp)