昨日、Screenの紹介をした。
それに関連して、wpコマンドを紹介したい。
別の仮想端末と同じディレクトリに移動したい
Screenを使っていてよくあるのが、「別の仮想端末と同じディレクトリに移動したい」ということ。
そんなときに使えるのが、wpコマンド。
(厳密には、Shellスクリプトに定義された関数)
例えば、次のように使える:
(仮想端末0で) $ pwd /home/somebody $ cd some/deep/deep/path/to/directory $ pwd /home/somebody/some/deep/deep/path/to/directory (仮想端末1で) $ pwd /home/somebody $ wp 0:/home/somebody/some/deep/deep/path/to/directory 1:/home/somebody $ wp 0 $ pwd /home/somebody/some/deep/deep/path/to/directory
このように、wpコマンドを引数なしで使うと、各仮想端末の現在のディレクトリのリストが表示され、引数で仮想端末の番号を指定すると、その番号の仮想端末の現在のディレクトリに移動することが出来る。
なお、以下で紹介するShellスクリプトはネットで見つけたものをちょっといじったものだけど、そのスクリプトではcddコマンドとなっていた。
ただ、cddとかタイプが面倒くさいので、wpコマンドに変更した。
wpはワープ(warp)の意。
.wp.sh
wpコマンドを使えるようにするためのShellスクリプトは、以下のとおり:
#---------------------------------------- # wp warp-command #---------------------------------------- wpdir=$HOME/.wp wpfile=$wpdir/wpfile wpmax=9 function wp_init() { if [ ! -d $wpdir ]; then mkdir $wpdir fi if [ ! -f $wpfile ]; then for i in `jot - 0 $wpmax`; do # for mac os x # for i in `seq 0 $wpmax`; do # for linux, cygwin echo "$i:" >> $wpfile done fi } function wp_cd() { dir=`sed -n "s/$1:\(.*\)$/\1/p" $wpfile` cd "$dir" } function wp_ls() { cat $wpfile } function wp_rec() { sed -e "s|$1:.*$|$1:$2|" -i "" $wpfile # for mac os x # sed -i "s|$1:.*$|$1:$2|" $wpfile # for linux, cygwin } function wp() { if [ $1 ]; then wp_cd $1 else wp_ls fi } function cd() { if [ "$1" ]; then builtin cd "$1" else builtin cd fi if [ $WINDOW ]; then wp_rec $WINDOW "`pwd`" fi } _wp() { COMPREPLY=(`wp_ls`) } complete -F _wp wp wp_init
組込みのcdコマンドを置き換えて、cdでディレクトリを移動したときに、どのディレクトリに移動したのかを記録するようにしている。
これを使えるようにするには、このShellスクリプトをホームディレクトリに置いておき、.bashrcで次のようにこのスクリプトを呼び出すようにしておく:
source .wp.sh
ちょっと便利な使い方
自分のようにScreenをローカルで使っていて、デタッチや再アタッチがうまく働かない場合も、wpコマンドは有益。
というのも、cdしたときのディレクトリが記録されているから。
このおかげで、仮想端末を作ったあとにwpを行えば、以前作業していたディレクトリで作業を再開することが出来る。
今日はここまで!