Come effettuare il cd in una directory con un nome contenente spazi in bash?

76

Ho provato cd "~/Library/Application Support/" -bash: cd: ~/Library/Application Support/: No such file or directory

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

    
posta colinfang 24.05.2011 - 04:33
fonte

7 risposte

102

Puoi usare il tasto Tab dopo aver premuto i primi caratteri (questo sarà quindi "riempire" il resto della cartella per te es. scrivi cd ~/L Tab compila cd ~/Library/ , quindi digita Ap Tab e riempirà il resto per te.

Se c'è uno spazio tra le parole e non vuoi usare i metodi sopra, metti un \ (backslash) prima dello spazio, ad es. cd ~/Library/Application\ Support .

    
risposta data 24.05.2011 - 05:18
fonte
25

Il problema principale qui è come la shell ( bash ) fa virgolette e come ciò influenza l'espansione della tilde e la suddivisione in "parole" (argomenti per il programma in esecuzione).

bash tratta la tilde principale solo se non è quotata. Inoltre, la seguente barra non deve essere citata.

Allo stesso tempo, bash analizza le righe di comando in "parole" basate su spazi non citati. Il comando cd richiede in genere esattamente un argomento (la directory di destinazione). Una riga di comando come cd foo bar significa eseguire cd con due argomenti: foo e bar . Se si desidera inviare solo un singolo argomento foo bar , è necessario citare lo spazio:
(ad esempio cd foo\ bar (vedi più esempi di esempio di seguito).

Nella tua situazione particolare, devi lasciare la tilde e la seguente barra non quotata mentre citi lo spazio nel nome della directory. Il tuo cd "~/Library/Application Support/" trial termina citando troppo (la tilde e la sua barra), mentre il tuo cd ~/Library/Application Support/ trial cita troppo poco (omette di citare lo spazio nel nome della directory).

La soluzione più comune è usare l'escape a singolo carattere per citare solo lo spazio:

    cd ~/Library/Application\ Support

Puoi anche usare virgolette singole o doppie attorno allo spazio o allo spazio e qualche altro bit di quell'argomento (ma non ~/ !):

    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

Questi tipi di virgolette hanno significati diversi, ma sono identici in questi esempi. Le virgolette singole proteggono le stringhe letterali mentre le virgolette doppie consentono varie espansioni e sostituzioni nella regione indicata.

Spesso puoi lasciare che la shell faccia il lavoro per te.

  • Globbing (caratteri jolly):

    cd ~/L*/Ap*
    

    Puoi utilizzare shopt -s nocaseglob per rendere insensibile la distinzione tra maiuscole e minuscole:

    cd ~/l*/ap*
    
  • Completamento:

    Se si preme la scheda dopo aver inserito cd ~/L probabilmente lo si espande a cd ~/Library/ .
    Premendo di nuovo Tab dopo aver inserito Ap (ora hai cd ~/Library/Ap ) probabilmente lo espanderai a cd ~/Library/Application\ Support/ (la shell inseriva automaticamente la barra rovesciata di escape).

    Puoi utilizzare bind 'set completion-ignore-case on' per rendere non sensibile al maiuscolo:

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

risposta data 24.05.2011 - 07:18
fonte
9

Quando si esegue il doppio virgolette di un percorso, si interrompe l'espansione della tilde. Quindi ci sono alcuni modi per farlo:

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

La tilde non è citata qui, quindi l'espansione tilde verrà comunque eseguita.

cd "$HOME/My Code"

È possibile espandere le variabili di ambiente all'interno di stringhe con doppi apici; questo è fondamentalmente ciò che sta facendo l'espansione tilde

cd ~/My\ Code

Puoi anche sfuggire a caratteri speciali (come lo spazio) con una barra rovesciata.

    
risposta data 07.08.2012 - 19:53
fonte
8

In alternativa puoi anche trascinare una cartella nella finestra Terminale, il percorso completo del file / cartella verrà incollato automaticamente al trascinamento.

    
risposta data 24.05.2011 - 15:54
fonte
3

Devi sfuggire allo spazio in " Application Support "

Prova $ cd ~/Library/Application\ Support/

    
risposta data 24.05.2011 - 05:18
fonte
0

Se i metodi normali non funzionano, prova a sostituire gli spazi con %20 .

Questo ha funzionato per me quando si trattava di SSH e di altri comandi in stile dominio come auto_smb .

    
risposta data 02.04.2015 - 19:14
fonte
0

Puoi provare questo per cartelle / file distanziati per Se il nome del file o della cartella contiene 1) nome file. Estensione il comando dovrebbe essere cd ~ / file \ nome.estensione / (o) cd ~ / "nome file.estensione" /

    
risposta data 23.05.2017 - 14:58
fonte

Leggi altre domande sui tag