122 votes

Comment cd vers un répertoire dont le nom contient des espaces en bash ?

J'ai essayé cd "~/Library/Application Support/" -bash: cd: ~/Library/Application Support/: No such file or directory

également cd ~/Library/Application Support/ -bash: cd: ~/Library/Application Support/: No such file or directory

0 votes

Utilisez \ -> pour le nom du répertoire : test one -> vous devriez écrire cd test\ one

162voto

robzolkos Points 10006

Vous pouvez utiliser le Tab après avoir appuyé sur les premiers caractères (le reste du dossier sera alors "rempli" pour vous, par exemple, tapez cd ~/LTab remplit cd ~/Library/ puis tapez ApTab et il remplira le reste pour vous.

S'il y a un espace entre les mots et que vous ne voulez pas utiliser les méthodes ci-dessus, mettez un \ (barre oblique inversée) avant l'espace, par ex. cd ~/Library/Application\ Support .

0 votes

Le chemin d'accès est-il sensible ou non à la casse ? Je peux accéder à Library par cd ~/library, mais la méthode de tabulation ne fonctionnera pas si je me trompe de casse.

0 votes

@colinfang OS X est insensible à la casse, mais respecte la casse. Le shell bash doit être un peu plus discriminant quand il s'agit d'autocomplétion.

0 votes

@NReilingh - Aha, thx.

34voto

Nip Points 362

La question centrale ici est de savoir comment le shell ( bash ) fait la citation et comment cela affecte l'expansion du tilde et la division en "mots" (arguments pour le programme en cours d'exécution).

bash ne traite le tilde de tête de manière spéciale que s'il n'est pas cité. En outre, la barre oblique suivante ne doit pas non plus être citée.

En même temps, bash analyse les lignes de commande en "mots" en se basant sur les espaces non quotés. Le site cd requiert généralement un seul argument (le répertoire de destination). Une ligne de commande comme cd foo bar signifie courir cd avec deux arguments : foo y bar . Si vous ne voulez envoyer qu'un seul foo bar vous devez alors citer l'espace :
(par exemple) cd foo\ bar (voir l'exemple de citation ci-dessous).

Dans votre situation particulière, vous devez laisser le tilde et la barre oblique suivante non cités tout en citant l'espace dans le nom du répertoire. Votre cd "~/Library/Application Support/" finit par citer trop de choses (le tilde et son slash), alors que votre cd ~/Library/Application Support/ trial cite trop peu (il omet de citer l'espace dans le nom du répertoire).

La solution la plus courante consiste à utiliser l'échappement à un seul caractère pour ne citer que l'espace :

    cd ~/Library/Application\ Support

Vous pouvez également utiliser des guillemets simples ou doubles autour de l'espace seul ou de l'espace et d'autres éléments de l'argument (mais pas autour de la ligne de commande). ~/ !) :

    cd ~/Library/Application' 'Support
    cd ~/Library/Application" "Support
    cd ~/Library/App'lication 'Support
    cd ~/Library/Application" Supp"ort
    cd ~/'Library/Application 'Support
    cd ~/"Library/Application "Support

Ces types de citations ont des significations différentes, mais elles sont identiques dans ces exemples. Les guillemets simples protègent les chaînes de caractères littérales, tandis que les guillemets doubles permettent diverses expansions et substitutions dans la région citée.

Souvent, vous pouvez laisser le shell faire le travail à votre place.

  • Globbing (caractères génériques) :

    cd ~/L*/Ap*

    Vous pouvez utiliser shopt -s nocaseglob pour rendre la globalisation insensible à la casse :

    cd ~/l*/ap*
  • Achèvement :

    Presser Tab après avoir saisi cd ~/L va probablement l'étendre à cd ~/Library/ .
    Presser Tab à nouveau après avoir saisi Ap (vous avez maintenant cd ~/Library/Ap ) va probablement l'étendre à cd ~/Library/Application\ Support/ (l'interpréteur de commandes insère automatiquement le backslash d'échappement).

    Vous pouvez utiliser bind 'set completion-ignore-case on' pour rendre l'achèvement insensible à la casse :

    cd ~/l Tab cd ~/Library/ ; ap Tab cd ~/Library/Application\ Support/

0 votes

Bonne réponse @Chris. Comment avez-vous fait pour que les caractères de tabulation ressemblent à des touches ?

4 votes

@RobZ : C'est le balise HTML (une parmi plusieurs Balises HTML prises en charge dans SE markdown ).

14voto

useralone Points 121

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 en fait 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.

9voto

Psychic2k Points 91

Vous pouvez également faire glisser un dossier dans la fenêtre du terminal. Le chemin d'accès complet au fichier/dossier sera collé automatiquement lors du déplacement.

4voto

EndangeredMassa Points 9532

Vous devez échapper à l'espace dans " Application Support "

Essayez $ cd ~/Library/Application\ Support/

LesApples.com

LesApples est une communauté de Apple où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres utilisateurs d'appareils Apple, poser vos propres questions ou résoudre celles des autres.

Powered by:

X