コマンド行シェルで作業ディレクトリを戻る作業について
cdコマンドではディレクトリを1つだけ戻れる
cdコマンドによる作業ディレクトリの移動は、1つ前にいたディレクトリに限って
$ cd -
で戻ることができる。ただし、更に1つ前に戻ろうとしてもうまくいかず、逆に進んでしまう。
[~]$ cd /usr/src/linux/ [/usr/src/linux]$ cd /tmp/ [/tmp]$ cd - [/usr/src/linux]$ cd - [/tmp]$
上の例では「~ --> /usr/src/linux <--> /tmp」と動き、「cd -」を繰り返すと、最後の2つのディレクトリを行ったり来たりする。
pushdとpopd
pushdとpopdは、たどったディレクトリをシェルの内部に記録しながら移動を行う。
これらはcdと同様、ともにシェルの組み込みコマンドで、bash/tcsh/zshのいずれのシェルも対応している。ただし、低機能軽量シェルのdashは例外で、これらのコマンドには対応していない。また、WineのCLIシェル(cmd.exe)でも使えるようだ。*1
使い方としては
となる。
移動したディレクトリの記録は、新しいディレクトリにpushdで移動すると追加され、その後でpopdを実行すると1つ前のディレクトリに戻り、戻った分の記録は消える。Webブラウザの「戻る」「進む」のたどり方とは異なり、一度戻った後で再び進み直すということはできない。
データの構造としては、積み上げて上から取り出すスタックという形をとる。
関連URL:
下は実行例。
[~]$ pushd /usr/src/linux /usr/src/linux ~ [/usr/src/linux]$ pushd /tmp/ /tmp /usr/src/linux ~ [/tmp]$ popd /usr/src/linux ~ [/usr/src/linux]$ popd ~ [~]$
この場合「~ --> /usr/src/linux --> /tmp」の後「~ <-- /usr/src/linux <-- /tmp」と動いている。
使用したバージョン: