shell小技:ある場所に簡単に戻る

最近研究でLinuxを使っているのですが、

~/programing/armrecog/result/20100905_naonr80/naonrf12s2_80_2/data/data82

こんな感じでやたらと深い階層をうろうろしています。
このとき
~/programing/armrecogと上の階層とを行き来したりする場合ってとても面倒くさいのです。

$ save

で現在位置を保存して、

$ back

でsaveを打ったときにいた場所に戻れたら便利だなぁ、と思ったので作ってみました。
Linuxには詳しくないのでもしかしたら元々そういうコマンドがあるかもしれません。あったら教えてください。

作り方

  1. まず、適当なディレクトリに以下のシェルスクリプトを配置。

~/bin/back_imple

#!/bin/sh
cd `cat ~/.saved_place`
  1. ~/に.saved_place というファイルを作成
$ cd
$ echo "" > .saved_place
  1. ~/.bashrc に以下のエイリアスを追加
alias save="pwd > ~/.saved_place"
alias back=". back_impl"
  1. .bashrc の変更を反映させる
$ source .bashrc

使い方

作業していて、ここにもどってきたいなと思ったディレクトリで、saveコマンド。その後どこに行ってもbackコマンドでそのディレクトリに帰ってこれます。

解説

  • save:pwdで自分が今いる場所を出力、それをファイルに出力して保存しています。
  • back:cat ~/.saved_placeで保存した場所を読み込み、その出力先にcdで移動しています。

ここで注意すべきは . back_implとなっていること。
この . (ドット)が大事です。

例えば、
cd.sh

#!/bin/sh
cd hogehoge

というcd.shを作ったとして、これを

./cd.sh

としてもhogehogeフォルダには移動してくれません。シェルスクリプトの中身は子プロセスが実行するので、簡単にうと自分の分身がhogehogeに移動してそのまま終了。本物の私の方は移動しない、となるようです。

が、これを

. ./cd.sh

と.を前に付けてやると、分身ではなくて自分自身で実行してくれるので移動でしてくれるのです。

source ./cd.sh

とした場合も同じなようですね。

他にもなぜわざわざback_implとかいうファイルにコードを書いているのか、.bashrcに直接かけよ、とかいろいろあると思いますが今日はこのへんで。

Linuxの知識は浅いのでいろいろのツッコミを募集しています。