以前紹介した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

ここまで————–

2件のレスポンス “gd.sh改良しました。”へ

  1. 管理人 より:

    コメントありがとうございます。
    最後のpwd表示は良いですね。参考にさせていただきます。
    通常通りの”cd”や”cd -”の時の動作はマズイですね~なにかいい方法を
    考えないと・・・また思いついたらまた書きますね。
    やはり自分では気づかないところがわかるので、とても勉強になります。

  2. rekkusu より:

    はじめまして!

    ありがとうございます。
    参考にさせていただきました。

    私の環境では
    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 ~”とすればよいだけですが・・・。

コメントをどうぞ

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

*


*

次のHTML タグと属性が使えます: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>