2010-12-02 27 views
23

PATHにいくつかのディレクトリを追加します。Cygwin:Windowsパス(スペースを含む)を含むパス変数を使用します。

[email protected] ~ 
$ winhome="/cygdrive/c/Documents\ and\ Settings/43598811/" 

[email protected] ~ 
$ cd $winhome 
bash: cd: /cygdrive/c/Documents\: No such file or directory  

[email protected] ~ 
$ cd "$winhome" 
bash: cd: /cygdrive/c/Documents\ and\ Settings/43598811/: No such file or directory 

エイリアスを作成します。

は、変数を作成します。 は、残念ながらこれらのdirsが

(ドキュメントと設定など)のスペースを含むWindowsパスに位置している私が失敗したに試してみました:

[email protected] ~ 
$ alias winhome="/cygdrive/c/Documents\ and\ Settings/43598811/" 

[email protected] ~ 
$ winhome 
bash: /cygdrive/c/Documents and Settings/43598811/: is a directory 

[email protected] ~ 
$ cd winhome 
bash: cd: winhome: No such file or directory 

ソフトリンクを使用して下さい: それは働いています...しかし私はこれを使用したくありません

何か提案はありますか?

答えて

24

これは動作します:

$ winhome="/cygdrive/c/Documents and Settings/" 
$ cd "$winhome" 
$ pwd 
/cygdrive/c/Documents and Settings 
+0

ありがとう! "$ winhome"、私はこれを決して想像しませんでした! – Guillaume

+0

しかし、評価を避ける方法はありますか? – Guillaume

+0

いいえ、私はそうは思わない。しかし、それは問題ではありませんか? – RobS

8

パスを引用符で囲むと、スペースをエスケープする必要はありませんが、cdを呼び出すときは、変数自体を引用符で囲む必要があります。

だからあなたの変数は、単純に次のように宣言しますが、変数の前後に引用符を使用して呼び出さなければなりません。

~> winhome="/cygdrive/c/Documents and Settings/43598811/" 
~> cd "$winhome" 

これが原因変数はシェルで置換し得る方法です。あなたは" "なしcd winhomeを行う場合は、変数が置換得れば、それはこのように見える終わる:

cd /cygdrive/c/Documents and Settings/43598811/ 

これは、4つの別々の引数として解析されます:cd/cygdrive/c/Documentsand、およびSettings/43598811/には意味がありませんディレクトリ/cygdrive/c/Documentsが存在しないため、シェルに存在しません。

+0

あなたはそれを自分で試しましたか? $ winhome = "/ cygdrive/c/Documents and Settings/43598811 /" は動作しません(設定することはできますが、cdすることはできません)。 – Guillaume

+0

おっと!あなたはあなたの質問にそのことを言及しなかったので、私はあなたがそれをやっていないと仮定しました。私は自分の答えを確定して、今度は実際に試しました。 ; D –

+1

あなたには少し失礼で申し訳ありません。この全部はとてもイライラしていた。 – Guillaume

1

変数を使ったアプローチは、正しく定義していればうまくいくはずです。正当な理由がない場合は、あなたのバックスラッシュが含まれています。

+0

ええ - 彼らはスペースをエスケープ(つまり引用)しようとしているようですが、元の投稿ではパス全体が引用されているので、必要ありません - 最初のパスが二重引用符から取り除かれ、それを動作させる – ErichBSchulz

+0

dir全体を引用するか、バックスラッシュをエスケープしてください - 両方ではありません! – Adam

15

あなたはCygwinの互換POSIXパスにWindowsのパスを変換するcygpathを使用することができます。また、いくつかの特別なシステムフォルダの出力場所(例えば、Windowsのホームディレクトリとして、デスクトップ、マイドキュメント、などが...)ここで

p="C:\Documents and Settings" 
cd "$(cygpath -u "${p}")" 

は、Cygwinのドキュメントへのいくつかの関連リンクですできます。

+0

チップをありがとう。しかし、私はまだ醜いコマンドに固執しています:cd "$(cygpath -u" $ {p} ")"。私はそれをvarに保存し、他のスクリプトやcmdで構文を覚えておく必要はありません。 – Guillaume

+1

'p2 =" $(cygpath -u "$ {p}") "' 'cd" $ p2 "' – Amro

+0

うわー!!ありがとうございました! – grinch

2

私は完全なcwywinのnoobです - しかし、確かにあなたの窓の家に戻ってsymlinkを作成するのは簡単な最初のステップでなければなりませんか?

すなわち:

その後、
wh="/cygdrive/c/Documents and Settings/Erich/My Documents" 
ln -s "$wh" wh 

することができますだけで:

ls wh 

あなたはなど、デスクトップで同じことを行う...と勝利/ CYG変換についてこれ以上心配ないだろうか?

編集は、今私はcygpathを使用しました - 私はこれを使用するためのツールです信じて - それはおそらく非常に遅く

+0

はい、いい考えです。ありがとう。 – Guillaume

+4

[answer about 'CYGWIN =" winsymlinks:native "'](http://stackoverflow.com/a/18660841/938111)で説明されているようにネイティブのNTFSシンボリックリンクを使用することもできます。デフォルトでは、Cygwinはシンボリックリンクをシミュレートして、通常のファイル内にレギュラーの宛先パスを格納します。しかし、Cygwin以外のアプリケーションはCygwinの回避策に準拠していません。 @Guillaume @ErichBSchulzネイティブのNTFSシンボリックリンクを使用すると、ネイティブのWindowsアプリケーションとCygwinのアプリケーションとの間でシンボリックリンクを共有できます。乾杯。 – olibre

5

互いに素の* nix /風のパスに対処するための小ぎれいなパッケージであるとか、シンボリックリンクなし今、私は最後の数年間で のこの問題の別の解決方法を使用します。 cygwin.batには、substコマンドを使用して、 仮想ドライブを作成するためのいくつかの文があります。このコマンドを使用すると、本当に長いパス (およびスペースや特殊なWin文字を含むもの)の代わりに ドライブ文字を使用することができます。後で をシェルとスクリプトから直接/cygdrive/x/,/cygdrive/y/、 というように参照することができます。これはまた、あなたがしたい場合、あなたはCygwinのから mountコマンドを使用して/cygdriveプレフィックスを取り除くことができ、関連のノートでエクスプローラなどのように窓 シェルから

をこれらのディレクトリへのショートカットを取得するのに役立ちます。 mount --helpを参照してください。

+0

それは面白い回避策です、ありがとう – Guillaume

3

cygpath --mydocsを使用してください。 cygpath --helpに応じ

その他の特別なフォルダ:パス/ cygdriveの/ C /プログラムファイル(x86の)へのアクセスのために

-A, --allusers  use `All Users' instead of current user for -D, -O, -P 
-D, --desktop   output `Desktop' directory and exit 
-H, --homeroot  output `Profiles' directory (home root) and exit 
-O, --mydocs   output `My Documents' directory and exit 
-P, --smprograms  output Start Menu `Programs' directory and exit 
-S, --sysdir   output system directory and exit 
-W, --windir   output `Windows' directory and exit 
4

、\文字を使用します。

$ cd /cygdrive/c/Program\ Files\ \(x86\) 

Good Day!

関連する問題