読者です 読者をやめる 読者になる 読者になる

pslaboが試したことの記録

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

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

iPad3のSIMロックに関する考察とSIM下駄による解除の試みはSoftbank版iPad3にiPhone用のSIM下駄を履かせてみるにいろいろ書いてます。

ポストした内容のカテゴリー分けがちゃんと出来てないので、過去記事を探したい方はお手数ですが検索で探してみてください。


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 できます。