cd ../../../ をなんとかしました


おはようございます。ライトノベル好きのツチノコです。年末年始に読むライトノベルは決めましたか?

さてansibleのplaybookを書いていたりすると、ディレクトリ構造が深くなりがちです。
作業中に深いディレクトリから浅いディレクトリへ移動するときにめんどいのでなんとかしました。
・cd ../../../ などで上がろうとすると、いくつ上がるんだっけとか、間違って ./ や …/ と typo する
・popd しようとしても移動先ディレクトリがスタックに入ってるとは限らない

watanabe-k@deploy:~/openstack-playbook/roles/image/templates/etc/glance/rootwrap.d$ pwd
/home/watanabe-k/openstack-playbook/roles/image/templates/etc/glance/rootwrap.d
watanabe-k@deploy:~/openstack-playbook/roles/image/templates/etc/glance/rootwrap.d$ # ここから openstack-playbook/roles に cd したい

.bashrc に以下のfunctionを定義します。

# .bashrc
function upto() {
    if [ $# -eq 0 ]; then
        cd ~
    else
        ptn=$(echo -n $1 | sed -e 's/\/$//g;s/\//\\\//g;')
        exp='s/\(.*'$ptn'[^/]*\/\).*/\1/g'
        dir=$(pwd)"/"
        cd $(echo $dir | sed -e "$exp")
    fi
}

function upto_completion() {
    COMPREPLY=( $(compgen -W "$(pwd|sed -e 's/\// /g')" ${COMP_WORDS[COMP_CWORD]} ) )
}
complete -F upto_completion upto

これでカレントディレクトリのパスの一部を指定して、そのディレクトリにcdするコマンドuptoができました。

$ upto pathの一部

こんな感じで使えます。

watanabe-k@deploy:~/openstack-playbook/roles/image/templates/etc/glance/rootwrap.d$ upto roles
watanabe-k@deploy:~/openstack-playbook/roles$

補完も効きます(候補がsortされるけど・・・)

watanabe-k@deploy:~/openstack-playbook/roles/image/templates/etc/glance/rootwrap.d$ upto [tab][tab]
etc                 glance              home                image               openstack-playbook  roles               rootwrap.d          templates           watanabe-k

部分一致にも対応してます。

watanabe-k@deploy:~/openstack-playbook/roles/image/templates/etc/glance/rootwrap.d$ upto openstack
watanabe-k@deploy:~/openstack-playbook$

べんり。

p.s. 華麗なる探偵アリス&ペンギンおもしろいですね

«
»

コメントを残す

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

Optionally add an image (JPEG only)