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 /
右から数えて消すときは負数を使えば良いらしい。
うーん・・・よく分からない。