bashのpushd, popdを使ってディレクトリを移動しまくってみる

bashのコマンドにpushdpopdというコマンドがあります。 組み込みコマンドなので他のシェルにあるかどうかは知らない。

しばらく前にtwitterで便利だよって話を聞いた気がしたのだけれど、実際使ってる人は見たことが無い。 謎なのでとりあえず使ってみることにしました。

dirs, pushd, popdの三つのコマンドでセットになっているようです。 ディレクトリのリストみたいなものを作って、それをぽんぽん移動しようじゃないか、ということみたい。

$ pwd
~
$ dirs
~

dirコマンドで記憶されてるディレクトリのリストを見れる。 最初は何も入れてないのでカレントディレクトリのみ。

例えば、ルートディレクトリに移動してみる。 cd使いたい気持ちを堪えてpushdを使います。

$ pushd /
/ ~

何かよくわかんないもんが出た。

この出力はdirsを実行した時の結果と一緒で、現在記憶されてるディレクトリのリストらしい。

$ dirs
/ ~
$ pushd /home
/home / ~
$ pwd
/home
$ dirs
/home / ~

こんな感じ。

引数をつけずにpushdを使うと、リストの左端(カレントディレクトリ)と左から二番目を入れ替える、らしい。

$ dirs
/home / ~
$ pushd
/ /home ~
$ pushd
/home / ~

不思議な動きだ・・・。素直に右にシフトしてくれりゃ良いのに。

じゃ3番めに行きたいときはどうすりゃ良いのかって言うと

$ pushd +2
~ /home /
$ pushd +2
/ ~ /home

左に2つシフトした。

$ dirs
/ ~ /home
$ pushd +1
~ /home /
$ pushd +1
/home / ~

一つずつでもシフトできる。 +nってやると、左からn番めのディレクトリが先頭にくるようにシフト、という意味になるらしい。 -nにすると、右からn番め、ということに。

リストから削除したいときは、

$ dirs
/home / ~
$ popd
/ ~
$ popd
~

こんな感じ。popdで左端が消える。

$ dirs
/home / ~
$ popd +1
/home ~
$ pwd
/home

途中から消すことも出来る。

$ dirs
/home / ~
$ popd -0
/home /

右から数えて消すときは負数を使えば良いらしい。

うーん・・・よく分からない。

参考:Man page of BASH_BUILTINS