web-dev-qa-db-ja.com

Cygwin:Windowsパス(スペースを含む)を含むパス変数の使用

PATHにいくつかのディレクトリを追加したいと思います。残念ながら、これらのディレクトリは、スペースを含むウィンドウパス(ドキュメントと設定など)にあります

私は次のことに失敗しました:

変数の作成:

43598811@E250BZD20015026 ~
$ winhome="/cygdrive/c/Documents\ and\ Settings/43598811/"

43598811@E250BZD20015026 ~
$ cd $winhome
bash: cd: /cygdrive/c/Documents\: No such file or directory    

43598811@E250BZD20015026 ~
$ cd "$winhome"
bash: cd: /cygdrive/c/Documents\ and\ Settings/43598811/: No such file or directory

エイリアスの作成:

43598811@E250BZD20015026 ~
$ alias winhome="/cygdrive/c/Documents\ and\ Settings/43598811/"

43598811@E250BZD20015026 ~
$ winhome
bash: /cygdrive/c/Documents and Settings/43598811/: is a directory

43598811@E250BZD20015026 ~
$ cd winhome
bash: cd: winhome: No such file or directory

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

なにか提案を ?

28
Guillaume

これは動作します:

$ winhome="/cygdrive/c/Documents and Settings/"
$ cd "$winhome"
$ pwd
/cygdrive/c/Documents and Settings
25
RobS

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

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

Cygwinドキュメントへの関連リンクを次に示します。

17
Amro

パスを引用符で囲む場合、スペースをエスケープする必要はありませんが、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 存在しない。

9
Chris Cooper

パス/ cygdrive/c/Program Files(x86)にアクセスするには、\文字を使用します。

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

良い一日!

6
mariofertc

おそらく今非常に遅いですが、私は過去数年間、この問題に対する別の解決策を使用しています。 cygwin.batでは、substコマンドを使用して仮想ドライブを作成するためにいくつかのステートメントの前に付けます。このコマンドを使用すると、本当に長いパス(およびスペースや特別なWin文字を含むパス)をドライブ文字で置き換えることができます。後で、シェルおよびスクリプトから直接/cygdrive/x//cygdrive/y/などとして参照できます。これは、エクスプローラーなどのWindowsシェルからこれらのディレクトリへのショートカットを取得するのにも役立ちます。

関連するメモで、必要に応じて、Cygwinからmountコマンドを使用して、/cygdriveプレフィックスを削除できます。 mount --helpを参照してください。

5
NandR

cygpath --mydocsを使用します。

cygpath --helpによるその他の特別なフォルダー:

-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
3
Patrick Bergner

私は完全なcwywin初心者です-しかし、確かにあなたのWindowsホームに戻るシンボリックリンクを作成することは簡単な最初のステップでなければなりませんか?

すなわち:

 wh="/cygdrive/c/Documents and Settings/Erich/My Documents"
 ln -s "$wh" wh

その後、あなたはちょうどすることができます:

 ls wh

デスクトップなどでも同じことができ、win/cygの変換について心配する必要はありませんか?

編集私はcygpathを使用しました-これは使用するツールだと思います-シンボリックリンクの有無にかかわらず、* nix/wind path disjointを扱うためのきちんとした小さなパッケージです

2
ErichBSchulz

変数を正しく定義すると、変数を使用したアプローチが機能するはずです。あなたには正当な理由なしにバックスラッシュが含まれています。

1
Ringding

Linuxはスペースを好まず、Windowsはそれを気にしません。昔の戦争!皆さん、私はこの戦争に陥ることや、この戦争に賭けをしないことをお勧めします。 :P

解決策は簡単です。cygwinでシンボリックリンクを作成し、使用を開始するだけです。

例:以下のようにJava_HOMEをエクスポートしたため、ビルドが失敗しました

$ export Java_HOME = "C:\ Program Files\Java\jdk1.8.0_144"

パスにスペースがあったため、これはcygwinからは機能しませんでした。

これを克服するために、ホームディレクトリの下にProgram Filesへのシンボリックリンクを作成しました。

$ cd〜

$ ln -s/cygdrive/c/Program\Files ProgramFiles

$ export Java_HOME = "/ home/adandekar/ProgramFiles/Java/jdk1.8.0_144"

これはシームレスに機能しました。お役に立てれば!

0
Abhay Dandekar