Подтвердить что ты не робот

Cygwin: использование переменной пути, содержащей путь к окну (с пробелом в нем)

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

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

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

[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

Создайте псевдоним:

[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

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

Любое предложение?

4b9b3361

Ответ 1

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

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

Ответ 2

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

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

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

Ответ 3

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

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

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

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

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

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

Ответ 4

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

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

Ответ 5

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

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

Добрый день!

Ответ 6

Используйте 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

Ответ 7

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

т.е.:

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

то вы можете просто:

 ls wh

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

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

Ответ 8

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

Ответ 9

Linux не любит пробелы, и Windows не заботится об этом. Вековая война! Ребята, я бы порекомендовал не участвовать в этой войне или ставить какие-либо ставки на эту. :П

Решение простое, просто создайте символическую ссылку в 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"

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