it-swarm.dev

Cygwin: użycie zmiennej ścieżki zawierającej ścieżkę systemu Windows (ze spacją)

Chcę dodać kilka katalogów do mojej ścieżki. Niestety te katalogi znajdują się w ścieżce Windows zawierającej spację (jak Dokumenty i Ustawienia)

Bezskutecznie próbowałem:

Utwórz zmienną:  

[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

Utwórz alias:

[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

Użyj miękkiego linku: To działa ... ale nie chcę tego używać 

Jakieś sugestie ? 

26
Guillaume

To działa:

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

Możesz użyć cygpath do konwersji ścieżki Windows na ścieżki POSIX kompatybilne z Cygwin. Może również wyświetlać lokalizacje niektórych specjalnych folderów systemowych (takich jak katalog domowy systemu Windows, pulpit, moje dokumenty itp.)

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

Oto kilka odnośników do dokumentacji Cygwina:

16
Amro

Jeśli umieścisz ścieżkę w cudzysłowie, nie musisz uciekać spacjami, ale gdy wywołasz zmienną cd, musisz umieścić zmienną w cudzysłowie, aby uzyskać prawidłowe zachowanie.

Więc twoja zmienna powinna być po prostu zadeklarowana w ten sposób, ale wywołana przy użyciu cudzysłowów wokół zmiennej:

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

Wynika to ze sposobu, w jaki zmienne są zastępowane w powłoce. Jeśli używasz cd winhome bez " ", to wygląda to tak, jak tylko zmienna zostanie zastąpiona:

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

Zostanie to przeanalizowane jako cztery oddzielne argumenty: cd, /cygdrive/c/Documents, and i Settings/43598811/, co nie ma sensu dla powłoki, ponieważ katalog /cygdrive/c/Documents nie istnieje.

8
Chris Cooper

Aby uzyskać dostęp do ścieżki/cygdrive/c/Program Files (x86), użyj znaku.

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

Dobry dzień!

6
mariofertc

Prawdopodobnie bardzo późno, ale używam innego rozwiązania tego problemu w ciągu ostatnich kilku lat. W cygwin.bat poprzedzam kilka instrukcji, aby utworzyć Napędy wirtualne za pomocą polecenia subst. Używając tego polecenia, możesz zastąpić literę drive naprawdę długimi ścieżkami (I te zawierające spacje lub specjalne znaki zwycięstwa). Później możesz odwołać się do Ze swojej powłoki i skryptów bezpośrednio jako /cygdrive/x/, /cygdrive/y/ iso on. Pomaga to również uzyskać skróty do tych katalogów z poziomu WindowsShell, takich jak Explorer itp.

Jeśli chcesz, możesz pozbyć się prefiksu /cygdrive za pomocą polecenia mount z Cygwin. zobacz mount --help.

5
NandR

Użyj cygpath --mydocs.

Inne specjalne foldery według 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
3
Patrick Bergner

Jestem kompletnym cobywin noob - ale z pewnością stworzenie dowiązania symbolicznego z powrotem do twojego domu z systemem Windows musi być łatwym pierwszym krokiem?

to znaczy: 

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

wtedy możesz po prostu:

 ls wh

możesz zrobić to samo dla swojego pulpitu itd ... i nie martwić się więcej o konwersję win/cyg?

edit teraz użyłem cygpath - wierzę, że jest to narzędzie do użycia - z dowiązaniami symbolicznymi lub bez nich to zgrabny mały pakiet do radzenia sobie z rozłączną ścieżką * nix/wind

2
ErichBSchulz

Podejście ze zmienną powinno działać, jeśli zostało zdefiniowane poprawnie. Twój zawiera odwrotne ukośniki bez powodu.

1
Ringding

Linux nie lubi przestrzeni, a okna go nie obchodzą. Stara wojna! Chłopaki, polecam nie popadać w tę wojnę ani nie postawić na nią żadnego zakładu. : P

Rozwiązanie jest proste, wystarczy utworzyć dowiązanie symboliczne w cygwin i zacząć z niego korzystać.

Na przykład: Moje kompilacje zawiodły, ponieważ wyeksportowałem Java_HOME jak poniżej

$ export Java_HOME = "C: Program Files Java jkk1.8.0_144"

To nie działało z cygwin, ponieważ w ścieżce było miejsce.

Aby temu zaradzić, utworzyłem dowiązanie symboliczne do Program Files pod moim domowym katalogiem.

$ cd ~

$ ln -s/cygdrive/c/Program Pliki programów

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

To działało bezproblemowo . Mam nadzieję, że to pomoże!

0
Abhay Dandekar