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