pslaboが試したことの記録

はてなダイヤリーからはてなブログに引っ越してきました

この日記は現在実行中の減量記録を含む個人的なメモとして始めましたが、最近はコンピュータやガジェット、ハック、セキュリティネタのほうがメインになっております。

はてなダイヤリー時代はカテゴリ分けが適当だったのですが、これはそのうち直します。


samba経由で参照中のフォルダのパスをssh経由でログイン中のシェルでcdする。

UNIXサーバのファイルをsamba経由で参照しつつ、そのファイルをシェル上から操作したい場合にフォルダ名を手作業で変換して cd するのはめんどくさいので、bashで関数として定義してみました。

さらにそれをcdのエイリアスとすることで、シェルのビルトインコマンドのcdの代替コマンドとして使えます。

フォルダの書き換えはガチで bash だけで書いてもよかったのですが、なんとなく awk も使ってみました

※2016/03/14更新: 指定されたパスを絶対パスに置き換えて cd するようにしました。

mycd ()
{
    if [ "$1" == "" ]; then
        \cd
    else
        \cd $(
            readlink -f "$1" | awk '

            # cygwin 向けの文字列変換
            $0 ~ /^[A-Z]:/ {
                    driveletter=tolower(gensub(/^([A-Z]):(.*)/, "\\1", ""))
                    path=(gensub(/^([A-Z]):(.*)/, "\\2", ""))

                    $0 = "/cygdrive/" driveletter "" path
            }

            # とある samba サーバへのパスを ssh ログイン時のパスに変換する
            $0 ~ /^\\\\samba_server/ {
                    $0 = gensub( /\\\\samba_server\\folder/,     "/folder",   "" )
            }

            {
                    $0 = gensub( /\\/, "/", "g")
                    print $1
            }'
        )

        # ls -al
    fi
}
alias cd=mycd

これを .bash_profile あたりに書いておけば、あとは cd 'samba経由のフォルダ名' で cd できます。