shell小技:ある場所に簡単に戻る
最近研究でLinuxを使っているのですが、
~/programing/armrecog/result/20100905_naonr80/naonrf12s2_80_2/data/data82
こんな感じでやたらと深い階層をうろうろしています。
このとき
~/programing/armrecogと上の階層とを行き来したりする場合ってとても面倒くさいのです。
$ save
で現在位置を保存して、
$ back
でsaveを打ったときにいた場所に戻れたら便利だなぁ、と思ったので作ってみました。
Linuxには詳しくないのでもしかしたら元々そういうコマンドがあるかもしれません。あったら教えてください。
作り方
~/bin/back_imple
#!/bin/sh cd `cat ~/.saved_place`
- ~/に.saved_place というファイルを作成
$ cd $ echo "" > .saved_place
- ~/.bashrc に以下のエイリアスを追加
alias save="pwd > ~/.saved_place" alias back=". back_impl"
- .bashrc の変更を反映させる
$ source .bashrc
解説
- 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の知識は浅いのでいろいろのツッコミを募集しています。