ディレクトリスタックで遊ぼう

最近の仕事は毎日TeraTermで色々と弄るような楽しい感じになっております(゜¬゜)

そこで、僕は良くディレクトリスタックを使うのだけど…他の人が余り使っていないのはもしかして機能自体が知られていない?と思ったりしたので、軽く説明などを書いてみようかな、と。

# 軽く検索してみたりしたら「わかる人にはわかる」程度しか見当たらなかった、というのもあり

ディレクトリスタックってなんぞや

ディレクトリスタックは、簡単には元に居たディレクトリをシェルに覚えておいてもらう機能という感じで、また、覚えているディレクトリに簡単に戻ることも出来たりする 便利機能です。

由来は古くて(DOSらしい?)bashだけでなくてその他色々なシェルがサポートしています。

# 因みに「スタック」という名前の癖に全然スタックされてなくて、むしろランダムにアクセスも可能な循環リストな感じだったりするのはご愛敬

 

わざわざ小難しい機能を使うよりも、新しいTerminalを開くとか、ターミナルマルチプレクサを使う、という解決法もある(というか流行とか)のですが、個人的にはそっちの方が難易度高いと思うのw

 

使い方その1:単に元居た場所を覚えて貰う

個人的には alias cd=pushd は嫌いだし愚策だと思うのです。どういう場合に使うのか?は明確にした方が良い(´・ω・`)

# ディレクトリを移動するのは cd だよ。覚えておきたい時には pushd するんだよ。

 

例えば、何か作業をしている最中に「一時的に他の事をしなきゃならない」というような場合など…

などなど

$ pwd
/home/xx/work/xxx
$ pushd /etc/yyy
/etc/yyy ~/work/xxx
$ vi yyy.conf
(何か弄ったり)
$ cd /var/tmp/yyy/
(他の場所で何かいろいろやったり)
$ popd
~/work/xxx

単にスタックに積んで、直ぐにpopdで取り出したら元の作業に復帰するような使い方をします。これは本当にスタックのイメージですね。

# 因みにpushdでもディレクトリは「移動」するので$OLDPWDは更新されますし、参照出来ます。具体的には pushd -で「移動先を覚えつつ元に居たディレクトリに戻る」という事が出来ます(何気に良く使う)

 

使い方その2:色々な場所のブックマークとして

例えばこんな感じの、Makefileとソースファイルが別のディレクトリに分けられたソースツリーで…

$ tree work/
work/
├── Makefile
└── src
    └── anysrc.x

1 directory, 2 files
$ cd work/
$ pwd
/home/xx/work
$ pushd src
~/work/src ~/work
$ pwd
/home/xx/work/src
$ pushd -0
~/work ~/work/src
$ pwd
/home/xx/work
$ dirs -v
 0  ~/work
 1  ~/work/src
$ make
(snip)
$ pushd -0
~/work/src ~/work
$ pwd
/home/xx/work/src
$ vi anysrc.x 
$ pushd -0
~/work ~/work/src
$ pwd
/home/xx/work
$ make
(snip)

まぁ、正直この位ならわざわざディレクトリスタックを使うほどじゃなくて cd で移動の方が早いかもw

幾つものディレクトリ(モジュール毎とか)で分割されているようなちょっと規模の大きいプロジェクトとかだと凄く便利なのですが…正直、3つか4つ位のスタックを飛び回っていると、色々と混乱してくるので「自分が何処に居るのか?」は意識しておく必要があります(^_^;)

# 個人的には毎回dirs -vで移動先の番号を確認した上でpushd +NでN番目に移動するのがオススメ。例示はpushd -0で底に移動してますがw (因みに引数無しなら「次」に進めるのも便利なのだけど、個人的には「移動先を意識して動く」のが好み←趣味の話か)

 

参考

とりあえずbashのマニュアルへの参照を置いておきます(他でもだいたい同じ)w