試験運用中なLinux備忘録・旧記事

はてなダイアリーで公開していた2007年5月-2015年3月の記事を保存しています。

コマンド行シェルで作業ディレクトリを戻る作業について

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

pushdpopdは、たどったディレクトリをシェルの内部に記録しながら移動を行う。
これらはcdと同様、ともにシェルの組み込みコマンドで、bash/tcsh/zshのいずれのシェルも対応している。ただし、低機能軽量シェルのdashは例外で、これらのコマンドには対応していない。また、WineCLIシェル(cmd.exe)でも使えるようだ。*1
使い方としては

  • 新しいディレクトリに移動するときに(cdの感覚で)移動先ディレクトリを引数に指定してpushd
  • 戻りたいときにpopd

となる。
移動したディレクトリの記録は、新しいディレクトリに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」と動いている。

使用したバージョン:

  • bash 3.2_p33
  • tcsh 6.15(6.15-r2)
  • zsh 4.3.4(4.3.4-r1)
  • dash 0.5.4.11
  • Wine 1.1.5

*1:Windowsコマンドプロンプトでも使えるらしい