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é.

7voto

Josh Points 157

Cela va le faire :

cd ~/My\ Code

J'ai dû l'utiliser pour travailler avec des fichiers stockés dans le lecteur iCloud. Vous ne voudrez pas utiliser les guillemets (") car il doit s'agir d'un chemin absolu. En d'autres termes, vous ne pouvez pas combiner les guillemets doubles avec le tilde (~).

À titre d'exemple, j'ai dû l'utiliser pour un projet récent :

cd ~/Library/Mobile\ Documents/com~apple~CloudDocs/Documents/Documents\ -\ My\ iMac/Project

J'espère que cela vous aidera.

4voto

Ry4an Points 56453

Un simple backslash fonctionne pour moi :

ry4an@ry4an-mini:~$ mkdir "My Code"

ry4an@ry4an-mini:~$ vi todir.sh

ry4an@ry4an-mini:~$ . todir.sh 

ry4an@ry4an-mini:My Code$ cat ../todir.sh 
#!/bin/sh
cd ~/My\ Code

Etes-vous sûr que le problème n'est pas que votre shell script change de répertoire dans son subshell, mais que vous revenez ensuite dans le shell principal (et le dir original) lorsque vous avez terminé ? J'ai évité cela en utilisant . pour exécuter le script dans le shell actuel, bien que la plupart des gens utiliseraient simplement un alias pour cela. Les espaces pourraient être un hareng rouge.

3voto

Évitez ~ dans scripts ; utilisez $HOME à la place.

2voto

Alterlife Points 2914

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 './')

2voto

Bobo Points 1303

Utiliser les guillemets

go () 
{ 
    cd "$*"
}

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