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 ?
Cela marche:
$ winhome="/cygdrive/c/Documents and Settings/"
$ cd "$winhome"
$ pwd
/cygdrive/c/Documents and Settings
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:
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.
Pour accéder au chemin/cygdrive/c/Program Files (x86), utilisez le caractère \.
$ cd /cygdrive/c/Program\ Files\ \(x86\)
Bonne journée!
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
.
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
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
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.
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!