それマグで!

知識はカップより、マグでゆっくり頂きます。 takuya_1stのブログ

習慣に早くから配慮した者は、 おそらく人生の実りも大きい。

cygpath の便利なオプション

CygwinつかっていてWin32のコンソールアプリ(Ruby.exeとかPHP.exeとかPython.exe)をCygwinBashから使うのにすごく重宝するCygpath。Cygpathについて知らないことが多い

おさらい。cygpathとは何か

cygpathはUNIXパスからWindowsパスの変換,またその逆の変換を行うことが出来る.Cygpathを使うと,Cygwinのマウントポイントを考慮したパスが取れるので便利ですね.

基本の使い方

使い方は習うより慣れろ.

cygwin(bash)から windows へ
takuya@letsnote:~$ cygpath -w /home/takuya
C:\Users\takuya
windows(cmd)から UNIX
C:\Users\takuya>cygpath -u C:\Users\takuya
/home/takuya

相互変換便利ですね.

更に便利な使い方

相対パスをフルパスに
takuya@letsnote:~$ cygpath -a -w .
C:\Users\takuya

相対パス絶対パスに変えること出来るし,それをWindowsPathにすることも出来る。

バックスラッシュを使わない

移植性を考慮すると, -w より -m:mix モードの方がとても便利

takuya@letsnote:~$ cygpath -a -m .
C:/Users/takuya 

コピペがしやすい。

バックスラッシュなしでもWindows(エクスプローラー)は大丈夫。Bashでの苦労が無くなる


Bashのバックスラッシュはエスケープ文字列で、cygpathの変化結果をコピペできない.以前、コピペ出来無いって書かれたブログを見かけたけどCygpathでもちゃんとコピペ対応の文字列が出る

デスクトップディレクトリが欲しい

-D / --desktop オプションがある

takuya@letsnote:~$ cygpath -Dm
C:/Users/takuya/Desktop
takuya@letsnote:~$ cygpath -Du
/home/takuya/Desktop

今いるディレクトリのWindowsパス名を知りたい

pwd を組み合わせて使う

takuya@letsnote:~/Desktop/google$ cygpath -m `pwd`
C:/Users/takuya/Desktop/google

ファイルのパス名をWin形式にしたい

特定のファイルが対象でも出来ます

takuya@letsnote:~/Desktop$ cygpath -am ~/.bashrc
C:/Users/takuya/.bashrc

ホームディレクトリのWindowsパスを出したい

bash の チルダが使える

takuya@letsnote:~/Desktop$ cygpath -am ~
C:/Users/takuya

system32 のパス名を取出したい

takuya@letsnote:~/Desktop$ cygpath -Sm
C:/Windows/System32

惜しむべきは programfilesの扱い

よく使う system32とProgram FilesディレクトリにCygpathでアクセス出来ないこと
これ環境変数を経由してこうやる

takuya@letsnote:~$ cygpath -am "$PROGRAMFILES"
C:/Program Files

Sambaやファイルサーバーのパスも

ネットワーク越しにも行ける

takuya@letsnote:~/Desktop$ cygpath -w //192.168.2.5/takuya/
\\192.168.2.5\takuya\

ネットワーク越しはもともと //でアクセス出来るのでcygpath使うことはあまりないけど.

ファイルパスをクリップボードにコピーしたい

/dev/clipboardつかう

takuya@letsnote:~/Desktop$ cygpath -am ~/.vimrc > /dev/clipboard
#=>  C:/Users/takuya/.vimrc がクリップボードにあるよ!!

WindowsのクリップボードCygwinで(/dev/clipboard)です。

結論

cygpath は mix モードを使え。フルパスを使え

UNIXをWindowsに変換するときは

cygpath -am 

この一択です。

おまけ

cygstart と組み合わせて使うと幸せになれるよ

デスクトップを開くなら

cygstart `cygpath -D`

さらにおまけ

alias open=cygstart

と書いておくとMacっぽくOpenでファイルが開けるよ.

open //192.168.2.5/takuya
open ~/日記.txt
open `pwd`
open `cygpath -O`

とか便利です

Cygwin便利です.みんなCygwin使いましょう.

感想

結局ね,CygwinってApacheと同じようなもんで,ファイルパスの取り扱いをWindowsパスとUNIXで変換するの。Apache がdocument root から / をマッピングするのと同じなんですよね。

ApacheにLocation/Aliasが在るように
CygwinにMount/Junction/Aliasがあるんですよね

Cygwinのforkとかそういう複雑さは使う人に取って意識する場所ではなくて,ファイルパスの変換とmount さえ覚えてしまえば快適なWindows混合Unixシステムになって幸せになれるよ