Cygwin: использование переменной пути, содержащей путь Windows (с пробелом в нем) - PullRequest
27 голосов
/ 02 декабря 2010

Я хочу добавить несколько каталогов в мой путь.К сожалению, эти каталоги расположены в пути Windows, содержащем пробел (например, Документы и настройки)

Я безуспешно пытался:

Создать переменную:

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

Использовать программную ссылку: это работает ... но я не хочу использовать это

Есть предложения?

Ответы [ 9 ]

25 голосов
/ 02 декабря 2010

Это работает:

$ winhome="/cygdrive/c/Documents and Settings/"
$ cd "$winhome"
$ pwd
/cygdrive/c/Documents and Settings
16 голосов
/ 02 декабря 2010

Вы можете использовать cygpath для преобразования пути Windows в Cygwin-совместимые пути POSIX.Он также может выводить расположение некоторых специальных системных папок (таких как домашний каталог Windows, рабочий стол, мои документы и т. Д.) *

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

Вот некоторые соответствующие ссылки на документацию Cygwin:

9 голосов
/ 02 декабря 2010

Если вы ставите путь в кавычках, вам не нужно экранировать пробелы, но когда вы вызываете cd, вам нужно поместить саму переменную в кавычки, чтобы получить правильное поведение.

Таким образом, ваша переменная должна быть просто объявлена ​​следующим образом, но вызываться с помощью кавычек вокруг переменной:

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

Это из-за способа, которым переменные подставляются в оболочку. Если вы сделаете cd winhome без " ", то после замены переменной это будет выглядеть следующим образом:

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

Это анализируется как четыре отдельных аргумента: cd, /cygdrive/c/Documents, and и Settings/43598811/, что не имеет смысла для оболочки, поскольку каталог /cygdrive/c/Documents не существует.

6 голосов
/ 27 февраля 2015

Для доступа к пути / cygdrive / c / Program Files (x86) используйте символ \.

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

Добрый день!

5 голосов
/ 07 августа 2013

Возможно, очень поздно, но я использую другое решение этой проблемы в течение последних нескольких лет.В cygwin.bat я добавляю несколько операторов для создания виртуальных дисков с помощью команды subst.Используя эту команду, вы можете заменить букву диска на действительно длинные пути (и те, которые содержат пробелы или специальные символы Win).Позже вы можете ссылаться на них из вашей оболочки и скриптов напрямую как /cygdrive/x/, /cygdrive/y/ и так далее.Это также помогает в получении ярлыков для этих каталогов из оболочки Windows, таких как проводник и т. Д.

В связанной заметке, если вы хотите, вы можете избавиться от префикса /cygdrive, используя команду mount из Cygwin.см mount --help.

3 голосов
/ 29 августа 2014

Использование 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
2 голосов
/ 31 января 2012

Я полный cwywin noob - но наверняка создание символической ссылки на ваш Windows Home должно быть простым первым шагом?

, то есть:

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

, тогда вы можете просто:

 ls wh

вы могли бы сделать то же самое для своего рабочего стола и т. Д. И больше не беспокоиться о конвертации win / cyg?

edit теперь у меня естьused cygpath - Я полагаю, что это инструмент, который нужно использовать - с или без символических ссылок, это небольшой пакет для работы с * nix / wind path disjoint

1 голос
/ 02 декабря 2010

Подход с переменной должен работать, если вы ее правильно определили.У вас есть обратная косая черта без уважительной причины.

0 голосов
/ 21 декабря 2018

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 \ FilesProgramFiles

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

Это работало без проблем.Надеюсь, это поможет!

...