gd.sh改良しました。
以前紹介したzsh auto_pushd のシェルスクリプトで
gd.shというの書いたのですが、少し改良しました。
改良した点はdirs -v -l で表示される重複したディレクトリは表示しないよう
にしたのと、逆順ソートにして最新のディレクトリが一番下に表示されるように
しました。改良時間は1時間くらいなのでうまく動かない場合があるかもしれませんが
その時はコメントお願いします。
では プログラムです。
ここから————–
#!/bin/sh
dirs -v -l | awk '{
a[$1]=$2;
b[$1]=$2;
}
END{
for( i=0; i<NR; i++){
work=a[i];
checknum=0;
for( j=i+1; j<NR; j++){
if( work == a[j] ){
b[j] = "skip";
}
}
}
for ( i=NR-1; i>-1; i--){
if ( b[i] != "skip"){
printf("%d %s\n",i,b[i]);
}
}
}'
echo 移動したい番号を選んでください。
read newdir
# 入力値に1をプラスし、その終了ステータスを判定する。
expr 1 + $newdir >/dev/null 2>&1
case $? in
0 | 1 )var=`dirs -v -l |grep -w $newdir |awk '{printf("%s\n",$2)}'`
cd $var;;
* ) echo " 数字以外が入力されました >$newdir" ;;
esac
ここまで————–


はじめまして!
ありがとうございます。
参考にさせていただきました。
私の環境では
alias grep=’grep -n’
と設定されているのと、
grepに-wオプションが存在しなかったのとで、
そのままではうまく動かなかったので、若干変更しました。
ついでに、ホントに行きたかったディレクトリに移動できているかどうかを
pwdで表示しています。
case $? in
0 | 1 )var=`dirs -v -l |/usr/bin/grep “^ *$newdir ” |awk ‘{printf(”%s\n”,$2)}’`
cd $var
pwd;;
* ) echo ” 数字以外が入力されました >$newdir” ;;
esac
追伸:
alias cd=’pushd > /dev/null’と設定されているので
cdのみを入力した時に、pushdが実行されるので前回居たディレクトリに移動するのですが、
通常通り”cd”ではホームに移動”cd -”で前回のディレクトリに移動となると、
導入障壁がより低くなりますね。
“cd ~”とすればよいだけですが・・・。
コメント by rekkusu — 2008/1/31 木曜日 @ 11:52:43
コメントありがとうございます。
最後のpwd表示は良いですね。参考にさせていただきます。
通常通りの”cd”や”cd -”の時の動作はマズイですね~なにかいい方法を
考えないと・・・また思いついたらまた書きますね。
やはり自分では気づかないところがわかるので、とても勉強になります。
コメント by 管理人 — 2008/1/31 木曜日 @ 21:52:11