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
ソフトリンクを使用:それは動作しています...しかし、私はこれを使用したくありません
なにか提案を ?
これは動作します:
$ winhome="/cygdrive/c/Documents and Settings/"
$ cd "$winhome"
$ pwd
/cygdrive/c/Documents and Settings
cygpath
を使用して、WindowsパスをCygwin互換のPOSIXパスに変換できます。また、いくつかの特別なシステムフォルダー(Windowsホームディレクトリ、デスクトップ、マイドキュメントなど)の場所を出力することもできます。
p="C:\Documents and Settings"
cd "$(cygpath -u "${p}")"
Cygwinドキュメントへの関連リンクを次に示します。
パスを引用符で囲む場合、スペースをエスケープする必要はありませんが、cd
を呼び出すときは、適切な動作を得るために変数自体を引用符で囲む必要があります。
したがって、変数は単純に次のように宣言する必要がありますが、変数を引用符で囲んで呼び出す必要があります。
~> winhome="/cygdrive/c/Documents and Settings/43598811/"
~> cd "$winhome"
これは、シェルで変数が置換される方法のためです。もしあなたがそうするなら cd winhome
なし" "
、変数が置換されると次のようになります。
cd /cygdrive/c/Documents and Settings/43598811/
これは、4つの個別の引数として解析されます:cd
、/cygdrive/c/Documents
、and
、およびSettings/43598811/
、ディレクトリ/cygdrive/c/Documents
存在しない。
パス/ cygdrive/c/Program Files(x86)にアクセスするには、\文字を使用します。
$ cd /cygdrive/c/Program\ Files\ \(x86\)
良い一日!
おそらく今非常に遅いですが、私は過去数年間、この問題に対する別の解決策を使用しています。 cygwin.batでは、subst
コマンドを使用して仮想ドライブを作成するためにいくつかのステートメントの前に付けます。このコマンドを使用すると、本当に長いパス(およびスペースや特別なWin文字を含むパス)をドライブ文字で置き換えることができます。後で、シェルおよびスクリプトから直接/cygdrive/x/
、/cygdrive/y/
などとして参照できます。これは、エクスプローラーなどのWindowsシェルからこれらのディレクトリへのショートカットを取得するのにも役立ちます。
関連するメモで、必要に応じて、Cygwinからmount
コマンドを使用して、/cygdrive
プレフィックスを削除できます。 mount --help
を参照してください。
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
私は完全なcwywin初心者です-しかし、確かにあなたのWindowsホームに戻るシンボリックリンクを作成することは簡単な最初のステップでなければなりませんか?
すなわち:
wh="/cygdrive/c/Documents and Settings/Erich/My Documents"
ln -s "$wh" wh
その後、あなたはちょうどすることができます:
ls wh
デスクトップなどでも同じことができ、win/cygの変換について心配する必要はありませんか?
編集私はcygpath
を使用しました-これは使用するツールだと思います-シンボリックリンクの有無にかかわらず、* nix/wind path disjointを扱うためのきちんとした小さなパッケージです
変数を正しく定義すると、変数を使用したアプローチが機能するはずです。あなたには正当な理由なしにバックスラッシュが含まれています。
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"
これはシームレスに機能しました。お役に立てれば!