it-swarm.com.de

Cygwin: Verwenden einer Pfadvariablen, die einen Windows-Pfad enthält (mit einem Leerzeichen)

Ich möchte meinem Pfad einige Verzeichnisse hinzufügen. Leider befinden sich diese Verzeichnisse im Windows-Pfad, der Leerzeichen enthält (wie Dokumente und Einstellungen).

Ich habe erfolglos versucht:

Eine Variable erstellen:  

[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

Erstelle einen Alias:

[email protected] ~
$ alias winhome="/cygdrive/c/Documents\ and\ Settings/43598811/"

[email protected]026 ~
$ winhome
bash: /cygdrive/c/Documents and Settings/43598811/: is a directory

[email protected] ~
$ cd winhome
bash: cd: winhome: No such file or directory

Verwenden Sie einen Softlink: Es funktioniert ... aber ich möchte das nicht verwenden 

Irgendein Vorschlag ? 

26
Guillaume

Das funktioniert:

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

Sie können cygpath verwenden, um den Windows-Pfad in Cygwin-kompatible POSIX-Pfade zu konvertieren. Es kann auch die Speicherorte einiger spezieller Systemordner (wie Windows-Home-Verzeichnis, Desktop, meine Dokumente usw.) ausgeben.

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

Hier sind einige relevante Links zur Cygwin-Dokumentation:

16
Amro

Wenn Sie den Pfad in Anführungszeichen setzen, müssen Sie die Leerzeichen nicht entgehen. Wenn Sie jedoch cd aufrufen, müssen Sie die Variable selbst in Anführungszeichen setzen, um das richtige Verhalten zu erhalten.

Ihre Variable sollte also einfach so deklariert werden, aber mit Anführungszeichen um die Variable herum aufgerufen werden:

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

Dies liegt daran, wie Variablen in der Shell ersetzt werden. Wenn Sie cd winhome ohne " " ausführen, sieht es so aus, wenn die Variable ersetzt wird:

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

Dies wird als vier separate Argumente analysiert: cd, /cygdrive/c/Documents, and und Settings/43598811/, was für die Shell keinen Sinn macht, da das Verzeichnis /cygdrive/c/Documents nicht existiert.

8
Chris Cooper

Verwenden Sie für den Zugriff auf den Pfad/cygdrive/c/Program Files (x86) das Zeichen \.

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

Schönen Tag!

6
mariofertc

Wahrscheinlich jetzt sehr spät, aber ich verwende für dieses Problem eine andere Lösung für die letzten Jahre. In der Datei cygwin.bat füge ich ein paar Anweisungen vor, um virtuelle Laufwerke mit dem Befehl subst zu erstellen. Mit diesem Befehl können Sie wirklich lange Pfade (Und solche, die Leerzeichen oder spezielle Win-Zeichen enthalten) durch einen Laufwerksbuchstaben ersetzen. Später können Sie von Ihrer Shell und Skripts direkt auf Als /cygdrive/x/, /cygdrive/y/ undso zugreifen. Dies hilft auch, Verknüpfungen zu diesen Verzeichnissen von WindowsShell wie Explorer usw. zu erhalten.

Wenn Sie möchten, können Sie das /cygdrive-Präfix mit dem Befehl mount von Cygwin entfernen. siehe mount --help.

5
NandR

Verwenden Sie cygpath --mydocs.

Andere spezielle Ordner nach 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

Ich bin ein kompletter cwywin noob - aber das Erstellen eines symbolischen Links zu Ihrem Windows-Zuhause muss ein einfacher erster Schritt sein?

dh: 

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

dann kannst du einfach:

 ls wh

sie könnten dasselbe für Ihren Desktop usw. tun ... und sich nicht mehr um die Win/Cyg-Konvertierung kümmern?

edit jetzt habe ich cygpath verwendet - ich glaube, das ist das Werkzeug - mit oder ohne Symlinks ist es ein nettes kleines Paket zum Umgang mit der * nix/wind path disjoint

2
ErichBSchulz

Der Ansatz mit der Variablen sollte funktionieren, wenn Sie ihn richtig definiert haben. Deiner enthält Backslashes ohne guten Grund.

1
Ringding

Linux mag keine Leerzeichen und Windows kümmert sich nicht darum. Alter alter Krieg! Jungs, ich würde empfehlen, nicht in diesen Krieg zu geraten oder auf diesen Krieg zu wetten. : P

Die Lösung ist einfach: Erstellen Sie einfach einen Symlink in cygwin und starten Sie ihn.

Zum Beispiel: Meine Builds sind fehlgeschlagen, weil ich Java_HOME wie folgt exportiert habe

$ export Java_HOME = "C:\Programme\Java\jdk1.8.0_144"

Dies funktionierte nicht von Cygwin, da ein Pfad im Pfad war.

Um dies zu umgehen, habe ich einen Symlink zu Programmdateien unter meinem Heimatverzeichnis erstellt.

$ cd ~

$ ln -s/cygdrive/c/Programme\Dateien Programmdateien

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

Das hat nahtlos geklappt. Hoffe, das hilft!

0
Abhay Dandekar