Ответ 1
Это работает:
$ winhome="/cygdrive/c/Documents and Settings/"
$ cd "$winhome"
$ pwd
/cygdrive/c/Documents and Settings
Я хочу добавить некоторые ролики в свою 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
Используйте мягкую ссылку: он работает... но я не хочу использовать этот
Любое предложение?
Это работает:
$ 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
без " "
, он будет выглядеть так, как только переменная get будет заменена:
cd /cygdrive/c/Documents and Settings/43598811/
Это анализируется как четыре отдельных аргумента: cd
, /cygdrive/c/Documents
, and
и Settings/43598811/
, что не имеет смысла для оболочки, потому что каталог /cygdrive/c/Documents
не существует.
Вероятно, очень поздно, но я использую другое решение этой проблемы для
последние несколько лет. В cygwin.bat я префикс несколько утверждений для создания
виртуальных дисков с помощью команды subst
. Используя эту команду, вы можете заменить
букву диска для действительно длинных путей
(и те, которые содержат пробелы или специальные символы Win). Позже вы можете обратиться к
их из вашей оболочки и скриптов непосредственно как /cygdrive/x/
, /cygdrive/y/
и
скоро. Это также помогает в создании ярлыков для этих каталогов из окон
shell, как проводник и т.д.
В соответствующем примечании, если вы хотите, вы можете избавиться от префикса /cygdrive
, используя
mount
от Cygwin. см. mount --help
.
Для доступа к пути /cygdrive/c/Program Files (x86) используйте символ \.
$ cd /cygdrive/c/Program\ Files\ \(x86\)
Добрый день!
Используйте 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 noob, но, безусловно, создание символической ссылки для вашего дома Windows должно быть простым первым шагом?
т.е.:
wh="/cygdrive/c/Documents and Settings/Erich/My Documents"
ln -s "$wh" wh
то вы можете просто:
ls wh
вы могли бы сделать то же самое для своего рабочего стола и т.д.... и больше не беспокоиться о преобразовании win/cyg?
изменить теперь я использовал cygpath
- я верю, что это инструмент для использования - с символическими ссылками или без них это аккуратный небольшой пакет для работы с контуром * nix/wind disjoint
Подход с переменной должен работать, если вы правильно определили его. У вас есть обратная косая черта по уважительной причине.
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"
Это работало без проблем. Надеюсь это поможет!