112 votes

Bash script pour cd vers un répertoire avec des espaces dans le nom de chemin

J'utilise Bash sur macOS X et j'aimerais créer un simple fichier exécutable script qui changerait de répertoire lorsqu'il serait exécuté. Cependant, le chemin d'accès à ce répertoire comporte des espaces. Comment faire ? Voici ce que j'ai...

Nom du fichier : cdcode

Contenu du fichier :

cd ~/My Code

Maintenant, il est vrai que ce n'est pas un long chemin d'accès, mais mon chemin d'accès réel est profond de cinq répertoires et quatre de ces répertoires ont des espaces dans le chemin.

BTW, j'ai essayé cd "~/My Code" y cd "~/My\ Code" et aucune d'entre elles n'a fonctionné.

94voto

derobert Points 26258

Lorsque vous double-cliquez sur un chemin, vous arrêtez l'expansion du tilde. Il y a donc plusieurs façons de le faire :

cd ~/"My Code"
cd ~/'My Code'

Le tilde n'est pas cité ici, donc l'expansion du tilde sera toujours exécutée.

cd "$HOME/My Code"

Vous pouvez développer les variables d'environnement à l'intérieur de chaînes de caractères entre guillemets ; c'est essentiellement ce que fait l'expansion du tilde

cd ~/My\ Code

Vous pouvez également échapper aux caractères spéciaux (comme l'espace) avec une barre oblique inverse.

48voto

user365757 Points 119

J'ai trouvé la solution ci-dessous sur cette page :

x="test\ me"  
eval cd $x

Une combinaison de \ dans une constante de texte entre guillemets et une eval avant cd le fait fonctionner comme un charme !

15voto

HanniBaL90 Points 356

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 plus simple est de mettre vos variables entre guillemets comme indiqué dans la réponse précédente :

cd "$yourPathWithBlankSpace"

2. Utiliser eval .

D'après cette réponse Commande Unix pour échapper aux espaces vous pouvez supprimer les espaces vides puis utiliser eval comme ceci :

yourPathEscaped=$(printf %q "$yourPathWithBlankSpace")
eval cd $yourPathEscaped

10voto

Andrew Flanagan Points 3336
cd ~/My\ Code

semble fonctionner pour moi... Si la suppression des guillemets et le maintien de la barre oblique ne fonctionnent pas, pouvez-vous afficher un exemple de code ?

10voto

Jonathan Leffler Points 299946

Vous pouvez utiliser n'importe lequel des éléments suivants :

cd ~/"My Code"
cd ~/M"y Code"
cd ~/My" Code"

Vous ne pouvez pas utiliser :

cd ~"/My Code"

La première fonctionne parce que l'interpréteur de commandes développe ~/ en $HOME/, puis ajoute My Code sans les doubles guillemets. La seconde échoue parce qu'il n'existe pas d'utilisateur appelé ' " (guillemets doubles) pour ~" à mettre en correspondance avec.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X