web-dev-qa-db-fra.com

Cygwin: utiliser une variable de chemin contenant un chemin Windows (avec un espace)

Je veux ajouter quelques dirs à mon chemin. Malheureusement, ces répertoires sont situés dans le chemin de la fenêtre contenant de l’espace (comme dans les documents et les paramètres)

J'ai essayé sans succès de:

Créer une variable:  

43598811@E250BZD20015026 ~
$ winhome="/cygdrive/c/Documents\ and\ Settings/43598811/"

43598811@E250BZD20015026 ~
$ cd $winhome
bash: cd: /cygdrive/c/Documents\: No such file or directory    

43598811@E250BZD20015026 ~
$ cd "$winhome"
bash: cd: /cygdrive/c/Documents\ and\ Settings/43598811/: No such file or directory

Créer un alias:

43598811@E250BZD20015026 ~
$ alias winhome="/cygdrive/c/Documents\ and\ Settings/43598811/"

43598811@E250BZD20015026 ~
$ winhome
bash: /cygdrive/c/Documents and Settings/43598811/: is a directory

43598811@E250BZD20015026 ~
$ cd winhome
bash: cd: winhome: No such file or directory

Utilisez un lien virtuel: Ça marche ... mais je ne veux pas l'utiliser 

Toute suggestion ? 

26
Guillaume

Cela marche:

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

Vous pouvez utiliser cygpath pour convertir le chemin Windows en chemins POSIX compatibles Cygwin. Il peut également générer les emplacements de certains dossiers système spéciaux (tels que le répertoire de base Windows, le bureau, mes documents, etc.).

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

Voici quelques liens pertinents vers la documentation Cygwin:

16
Amro

Si vous mettez le chemin d'accès entre guillemets, vous n'avez pas besoin d'échapper aux espaces, mais lorsque vous appelez cd, vous devez mettre la variable elle-même entre guillemets pour obtenir le comportement approprié.

Donc, votre variable devrait simplement être déclarée comme ceci, mais appelée en utilisant des guillemets autour de la variable:

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

Cela est dû à la manière dont les variables sont substituées dans le shell. Si vous faites cd winhome sans le " ", cela ressemblera à ceci une fois la variable remplacée:

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

Cela est analysé comme quatre arguments distincts: cd, /cygdrive/c/Documents, and et Settings/43598811/, ce qui n'a aucun sens pour le shell car le répertoire /cygdrive/c/Documents n'existe pas.

8
Chris Cooper

Pour accéder au chemin/cygdrive/c/Program Files (x86), utilisez le caractère \.

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

Bonne journée!

6
mariofertc

Probablement très tard maintenant, mais j’utilise une solution différente à ce problème pour le Dernières années. Dans le fichier cygwin.bat, préfixez quelques instructions pour créer des lecteurs virtuels à l'aide de la commande subst. En utilisant cette commande, vous pouvez substituer une lettre drive par des chemins très longs (Et ceux contenant des espaces ou des caractères spéciaux Win). Plus tard, vous pourrez vous référer à Depuis votre shell et vos scripts directement en tant que /cygdrive/x/, /cygdrive/y/ et so. Cela aide également à obtenir des raccourcis vers ces répertoires à partir de WindowsShell comme Explorer, etc.

Sur une note connexe, si vous le souhaitez, vous pouvez supprimer le préfixe /cygdrive en utilisant la commande mount de Cygwin. voir mount --help.

5
NandR

Utilisez cygpath --mydocs.

Autres dossiers spéciaux selon 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

Je suis un cwywin complet - mais créer un lien symbolique vers votre page d'accueil Windows doit être une première étape facile.

c'est à dire: 

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

alors vous pouvez simplement:

 ls wh

vous pourriez faire la même chose pour votre bureau, etc ... et ne vous inquiétez plus de la conversion win/cyg?

edit maintenant que j'ai utilisé cygpath - Je crois que c'est l'outil à utiliser - avec ou sans liens symboliques, il s'agit d'un joli petit paquet permettant de gérer le disjoint du chemin * nix/wind

2
ErichBSchulz

L'approche avec la variable devrait fonctionner si vous l'avez définie correctement. Le vôtre contient des barres obliques inverses sans raison valable.

1
Ringding

Linux n'aime pas les espaces et Windows ne s'en soucie pas. Vieille guerre! Les gars, je recommanderais de ne pas tomber dans cette guerre ou de miser sur celle-ci. : P

La solution est simple, créez simplement un lien symbolique dans cygwin et commencez à l'utiliser.

Par exemple: mes constructions échouaient car j'avais exporté Java_HOME comme ci-dessous

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

Cela n'a pas fonctionné depuis cygwin, car il y avait un espace dans le chemin.

Pour surmonter cela, j'ai créé un lien symbolique vers Program Files sous mon répertoire personnel.

$ cd ~

$ ln -s/cygdrive/c/Programme\Fichiers ProgramFiles

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

Cela a fonctionné de manière transparente . J'espère que cela aide!

0
Abhay Dandekar