Как мне избавиться от префикса Cygwin / cygdrive во всех путях?

36

Я переключаюсь на Cygwin из оболочки bash, которая поставляется с Git для Windows, и сталкиваюсь со странной проблемой. Кто-то подумал, что было бы неплохо добавить /cygdrive/все пути, хотя я думаю, что это ужасно уродливая идея. Я смог определить, что могу частично это исправить, добавив

mount --change-cygdrive-prefix /
export HOME=/c/Users/BZISAD0

в моем .bashrc, но если я взгляну на переменную PATH, все по-прежнему имеет / cygdrive / в нем. Полагаю, я мог бы написать сценарий для исправления PATH, но это еще более хитро, чем то, что я уже делаю. Там должен быть лучше, и я довольно уверен , есть так Баш оболочки использует Git ( в AFAIK) старая версия Cygwin, и это каким - то образом настроен на не перед именем /cygdriveвезде. Итак, как я могу повернуть ручку «сосать» на ноль?

Гари Ларсон комикс

иконоборец
источник

Ответы:

39

Перепрыгнув в / etc, мы обнаружили ссылку, которую не нашел Google . Оказывается, вы можете контролировать это в файле /etc/fstab. Просто добавьте строку, которая говорит

none / cygdrive binary 0 0

и проблема должна быть исправлена. Больше нет ошибок в .bashrc и нет проблем с $ PATH.

иконоборец
источник
2
Я использовал этот метод, и теперь, когда я пытаюсь это сделать ls /, диски Windows не отображаются. Даже при использовании ls -l /. Это ожидается? Это можно исправить? Это то, что я имею в fstab:none / cygdrive binary,posix=0,user,acl 0 0
Тиби
Я не знал, что есть способ получить диски Windows /. У вас было это раньше? (Или на /cygdrive/?) Я всегда просто жил с фактом, что мне нужно знать, какие диски Windows доступны, и я почти никогда не использую их в любом случае.
иконоборчество
1
Да, ls /cygdriveследует перечислить диски Windows. Выход для меня, например, есть c/ e/ f/. Обратите внимание, как диски обрабатываются как папки.
Kat
1
Это только половина работы. Два крепления (реальное /и cygdrive) как бы накладываются друг на друга. То есть: вы можете получить доступ к дискам, используя /cи т. Д. - но они никогда не перечислены как часть /. Я думаю, что настоящее /скрывает содержимое cygdriveсписка. Я задаюсь вопросом, является ли это технически неопределенным поведением и могло бы что-то сломать. В любом случае, поскольку я предпочитаю видеть все, с чем работаю, я выбираю /mnt.
underscore_d
1
@Tibi Я обнаружил, что если вы перейдете в /, а затем выполните mkdir c (или каково бы ни было название вашего диска), это сделает эту точку монтирования диска видимой для ls, вместо того, чтобы перезаписывать ее пустой папкой. Кто бы мог подумать?
barksdml
10

Способ первый

mount -c /
mount -m > /etc/fstab

Способ второй

echo - / cygdrive acl > /etc/fstab

пример

Стивен Пенни
источник
как до, так и после этого (метод 1), /ссылался на корневой каталог cygwin64 и cd /cне работал. Чтобы сделать cd /cработу, я должен был сделать mount c: /c.
ММ
/cникогда не должен был работать, мое решение никогда не предполагало, что
Стивен Пенни
2
Я интерпретирую «как избавиться от / cygdrive в путях», чтобы означать «как разрешить / c работать вместо / cygdrive / c» (и аналогично для других букв). Мой PATH теперь действительно показывает / c / bla вместо / cygdrive / c / bla
MM
1
По состоянию на 2.9.0 (0.318 / 5/3) 2017-09-12 10:18 x86_64 Cygwin, выполнение первого метода позволит пользователю cd /cили cd c:. Использование по- cd /прежнему идет в каталог cygwin64.
Марсель Уилсон
1

Да, крепление должно работать.

mount -c /

Если у вас все еще есть записи, на PATHкоторые вы ссылаетесь /cygdrive, вам, вероятно, просто нужно перезагрузиться.

Кроме того, проверьте, есть ли какие-либо PATHнастройки в /etc/profileэтом отношении /cygdrive.

Mikel
источник
Ты имеешь в виду перезагрузить Cygwin или вообще перезагрузить всю машину?
иконоборчество
Я думаю, что вам нужно прекратить все процессы на основе Cygwin. Самый простой способ сделать это - перезагрузить компьютер.
Микель
Обычно я отдаю предпочтение ответам других людей, когда нахожу ответы на свои собственные вопросы, но поскольку ваш требует перезагрузки (или симуляции), а мой - тот, который содержится в документации cygwin, я ухожу с моим.
иконоборчество
Если у вас работал без перезагрузки, то непременно!
Микель
Но если я перезагружу машину, это изменение исчезнет. Вернуться к тому, что хранится в fstab.
rustyx