Come fare un cd in una directory con spazio nel nome?

Ho provato un sacco di cose. Vedi sotto:

Tentativo di entrare nella directory: / cygdrive / c / Users / my dir / Documents

$ DOCS="/cygdrive/c/Users/my\ dir/Documents" $ echo $DOCS /cygdrive/c/Users/my\ dir/Documents $ cd $DOCS -bash: cd: /cygdrive/c/Users/my\: No such file or directory $ cd /cygdrive/c/Users/my\ dir/Documents (success) 

Comportamento molto strano Quando lo digito manualmente, il backspace fa la sua cosa di escape. Ma non quando uso l’espansione dei parametri con la variabile DOCS.
Ho provato altre varianti come senza barra rovesciata.

 $ DOCS=/cygdrive/c/Users/Rahman\ dir/Documents $ echo $DOCS /cygdrive/c/Users/my dir/Documents $ cd $DOCS -bash: cd: /cygdrive/c/Users/my: No such file or directory 

o

 $ DOCS="/cygdrive/c/Users/my dir/Documents" $ echo $DOCS /cygdrive/c/Users/my dir/Documents $ cd $DOCS -bash: cd: /cygdrive/c/Users/my: No such file or directory 

So che è ansible. Vedere qui:

 $ echo $HOME /home/my dir 

[EDIT] Come sottolineato, cd $ HOME non funziona neanche. le virgolette devono essere circoscritte.

Che diamine:

 $ DOCS="\"/cygdrive/c/Users/my dir/Documents\"" $ echo $DOCS "/cygdrive/c/Users/my dir/Documents" $ cd $DOCS -bash: cd: "/cygdrive/c/Users/my: No such file or directory 

 $ cd "$DOCS" 

È necessario citare "$DOCS" per impedire che gli spazi vengano analizzati come separatori di parole. Più spesso, i riferimenti variabili dovrebbero essere citati.

Nota che $HOME avrebbe lo stesso problema. Il problema viene da quando la shell valuta i riferimenti alle variabili; non ha niente a che fare con le variabili che usi o come le assegni. È l’espansione che deve essere citata.

 $ echo $HOME /home/my dir 

Questo è ingannevole. echo effetti fa eco alle due stringhe /home/my e dir . Se usi cd o ls vedrai come funziona.

 $ ls $HOME ls: cannot access /home/my: No such file or directory ls: cannot access dir: No such file or directory $ cd $HOME bash: cd: /home/my: No such file or directory $ cd "$HOME"  

Posso chiederti perché funziona quando lo digito manualmente ma non in una variabile?

Ottima domanda! Esaminiamo i comandi che hai digitato:

 $ DOCS="\"/cygdrive/c/Users/my dir/Documents\"" $ echo $DOCS "/cygdrive/c/Users/my dir/Documents" $ cd $DOCS -bash: cd: "/cygdrive/c/Users/my: No such file or directory 

Il motivo per cui questo non funziona è perché Bash non analizza le virgolette all’interno di espansioni variabili. Esegue la divisione delle parole, quindi gli spazi in espansioni variabili non quotate vengono presi come separatori di parole. Non analizza le virgolette in alcun modo, il che significa che non puoi mettere virgolette all’interno di una variabile per sovrascrivere la divisione delle parole.

 $ cd $DOCS 

Per questo cd , cd superato due parametri. Per quanto riguarda il cd , sembra che tu abbia scritto:

 $ cd '"/cygdrive/c/Users/my' 'dir/Documents"' 

Due parametri, con virgolette doppie intatte.

 $ DOCS="/cygdrive/c/Users/my\ dir/Documents" 

Ecco il tuo primo problema. Questo mette un vero carattere backslash in $DOCS , come puoi vedere eseguendo questo comando:

 $ echo "$DOCS" /cygdrive/c/Users/my\ ` 

Quando si definiscono i DOCS , è necessario sfuggire al carattere dello spazio. Puoi citare la stringa (usando virgolette singole o doppie) oppure puoi sfuggire solo al carattere spazio con una barra rovesciata. Non puoi fare entrambe le cose. (Sulla maggior parte dei sistemi di tipo Unix, è ansible avere una barra rovesciata in un nome di file o directory, anche se non è una buona idea. Su Cygwin o Windows, \ è un delimitatore di directory. Ma assumerò il nome effettivo del la directory è la my dir , non la my\ dir .)

 $ cd $DOCS 

Questo passa due argomenti su cd . Il primo è cygdrive/c/Users/my\ , e il secondo è dir/Documents . Succede che cd ignora tranquillamente tutto tranne il primo argomento, che spiega il messaggio di errore:

 -bash: cd: /cygdrive/c/Users/my\: No such file or directory 

Per impostare $DOCS al nome della tua cartella Documents , fai uno di questi:

 $ DOCS="/cygdrive/c/Users/my dir/Documents" $ DOCS='/cygdrive/c/Users/my dir/Documents' $ DOCS=/cygdrive/c/Users/my\ dir/Documents 

Dopo averlo fatto, per passare alla directory Documents , racchiudi la variabile reference tra virgolette (è una buona idea per qualsiasi riferimento alle variabili in bash, a meno che tu non sia sicuro che il valore non abbia caratteri divertenti):

 $ cd "$DOCS" 

Si potrebbe anche considerare di dare a tale directory un nome senza spazi, anche se ciò può essere difficile da fare in generale su Windows.

SOLUZIONE:

 cd "Documents and Photos" 

problema risolto.

Il motivo per cui sto inviando questa risposta è che StackOverflow viene utilizzato da utenti di tutti i giorni (non solo sviluppatori Web, programmatori o utenti esperti) e questo è stato il risultato numero uno per una semplice domanda utente Windows su Google.

Le persone stanno diventando più esperte di tecnologia, ma non hanno necessariamente familiarità con la linea di comando nei casi precedenti.

Perché non inserire quanto segue nel tuo .cshrc (o .bashrc , o qualunque sia la tua shell di default):

 alias mydoc 'cd "/cygdrive/c/Users/my dir/Documents"' 

La prima volta che lo fai, devi farlo

 source .cshrc 

per aggiornare la shell con questo nuovo alias, quindi è ansible digitare

 mydoc 

ogni volta che vuoi effettuare il cd nella tua directory.

La pigrizia è la madre dell’invenzione …

Se vuoi spostarti da c:\ e vuoi andare in c:\Documents and settings , scrivi su console: c:\Documents\[space]+tab e cygwin lo completerà automaticamente come c:\Documents\ and\ settings/

provare

 DOCS="/cygdrive/c/Users/my\ dir/Documents"; cd "$DOCS" 

ok ho passato del tempo frustrante anche con questo problema. La mia piccola guida.

Apri desktop per esempio. Se non hai cambiato il tuo disco in cmd, digita:

desktop cd

Ora se vuoi visualizzare le sottocartelle:

cd , crea 1 barra spaziatrice e premi scheda 2 volte

Ora se vuoi inserire directory / file con SPACE IN NAME . Apriamo qualche nome file fg, per aprirlo dobbiamo digitare:

cd file \ nome

ps noti questo spazio dopo la barra 🙂

Metti semplicemente la cartella in una singola citazione

per esempio

 C:\> cd my folder 

sarà

  C:\> cd 'my folder' 

METODO 1 : con le virgolette

cd "C:/Prgram Files (x86)"

cd 'C:/Program Files (x86)'

generalizzata

cd 'Folder Path'

Metodo 2 : senza utilizzare le virgolette

cd Program\ Files \(x86\)

Generalizzato Ogni volta che vogliamo saltare il prossimo carattere usiamo il blackslash \ .

Per la domanda precedente: cd /cygdrive/c/Users/my\ dir/Documents

Invece di:

 DOCS="/cygdrive/c/Users/my\ dir/Documents" 

Provare:

 DOCS="/cygdrive/c/Users/my dir/Documents" 

Questo dovrebbe funzionare su qualsiasi sistema POSIX .