bashのpushd, popdを使ってディレクトリを移動しまくってみる
bashのコマンドにpushd
、popd
というコマンドがあります。
組み込みコマンドなので他のシェルにあるかどうかは知らない。
しばらく前に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 /
右から数えて消すときは負数を使えば良いらしい。
うーん・・・よく分からない。