J'utilise Bash sur macOS X et j'aimerais créer un simple fichier de script exécutable qui changerait vers un autre répertoire lorsqu'il est exécuté. Cependant, le chemin d'accès à ce répertoire contient des espaces. Comment diable faites-vous cela? C'est ce que j'ai ...
Nom du fichier: cdcode
Contenu du fichier:
cd ~/My Code
Maintenant accordé, ce n'est pas un chemin long, mais mon chemin réel est de cinq répertoires de profondeur et quatre de ces répertoires ont des espaces dans le chemin.
BTW, je l' ai essayé cd "~/My Code"
et cd "~/My\ Code"
ni de ces travaillé.
Réponses:
Lorsque vous double-citez un chemin, vous arrêtez l'expansion du tilde. Il y a donc plusieurs façons de procéder:
Le tilde n'est pas cité ici, donc l'expansion du tilde sera toujours exécutée.
Vous pouvez développer les variables d'environnement dans des chaînes entre guillemets; c'est essentiellement ce que fait l'expansion du tilde
Vous pouvez également échapper les caractères spéciaux (tels que l'espace) avec une barre oblique inverse.
la source
J'ai trouvé la solution ci-dessous sur cette page :
Une combinaison de
\
dans une constante de texte entre guillemets et uneval
avantcd
fait fonctionner comme un charme!la source
eval
ici.eval
.semble fonctionner pour moi ... Si laisser tomber les guillemets mais garder la barre oblique ne fonctionne pas, pouvez-vous publier un exemple de code?
la source
Vous pouvez utiliser l'un des éléments suivants:
Vous ne pouvez pas utiliser:
Le premier fonctionne parce que le shell développe ~ / en $ HOME /, puis clique sur Mon code sans les guillemets. Le second échoue car il n'y a pas d'utilisateur appelé «
"
» (guillemet double) pour~"
mapper.la source
Après avoir lutté avec le même problème, j'ai essayé deux solutions différentes qui fonctionnent:
1. Utilisez des guillemets doubles (
""
) avec vos variables.Le moyen le plus simple de double guillemet vos variables comme indiqué dans la réponse précédente:
2. Utilisez
eval
.Selon cette réponse Commande Unix pour échapper des espaces, vous pouvez supprimer les espaces vides puis utiliser
eval
, comme ceci:la source
Un seul backslash fonctionne pour moi:
Êtes-vous sûr que le problème n'est pas que votre script shell change de répertoire dans son sous-shell, mais vous êtes de retour dans le shell principal (et le répertoire d'origine) une fois terminé? J'ai évité cela en utilisant. pour exécuter le script dans le shell actuel, bien que la plupart des gens utilisent simplement un alias pour cela. Les espaces pourraient être un hareng rouge.
la source
Évitez ~ dans les scripts; utilisez plutôt $ HOME.
la source
Lorsque vous travaillez sous Linux, la syntaxe ci-dessous est correcte:
cd ~/My\ Code
Cependant, lorsque vous exécutez votre fichier, utilisez la syntaxe ci-dessous:
$ . cdcode
(juste "." et non "./")
la source
utiliser des guillemets doubles
la source
.bashrc
fichier pour changer de répertoire lors du collage de noms de répertoires contenant des espaces sur la ligne de commande sans avoir à ensuite échapper les espaces ou citer le tout.cds
est un meilleur nom cependant.go
équivalent àcd
, c'est- à -dire, cd vers le répertoire personnel?La manière très simple de procéder est-
Dans bash, exécutez la commande DIR et dans les résultats, vous verrez que les noms de dossier ou de chemin ayant un espace entre eux ont été écrits dans les résultats comme ceci -
la source
Cela le fera:
J'ai dû l'utiliser pour travailler avec des fichiers stockés sur iCloud Drive. Vous ne voudrez pas utiliser de guillemets doubles (") car il doit s'agir d'un chemin absolu. En d'autres termes, vous ne pouvez pas combiner des guillemets doubles avec le tilde (~).
A titre d'exemple, j'ai dû utiliser ceci pour un projet récent:
J'espère que cela aide.
la source
J'avais un problème similaire maintenant si j'utilisais un script bash pour vider certaines données. J'ai fini par créer un lien symbolique dans le dossier du script sans aucun espace. J'ai ensuite pointé mon script vers le lien symbolique et cela fonctionne très bien.
Pour créer votre lien. ln -s [RÉPERTOIRE OU FICHIER CIBLE] ./[SHORTCUT]
Mau ou peut ne pas être utile.
la source
Utilisez des guillemets simples, comme:
la source