Saltar al contenido

¿Cómo hacer cd en un directorio con espacio en el nombre?

Si encuentras alguna incompatibilidad con tu código o trabajo, recuerda probar siempre en un ambiente de testing antes aplicar el código al proyecto final.

Solución:

$ cd "$DOCS"

necesitas cotizar "$DOCS" para evitar que los espacios se analicen como separadores de palabras. La mayoría de las veces, las referencias variables deben citarse.

Tenga en cuenta que $HOME tendria el mismo problema. El problema surge cuando el shell evalúa referencias de variables; no tiene nada que ver con las variables que usa o cómo las asigna. Es la expansión la que necesita ser cotizada.

$ echo $HOME
/home/my dir

Esto es engañoso. echo en realidad está haciendo eco de las dos cadenas /home/my y dir. Si utiliza cd o ls verás cómo funciona realmente.

$ 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"


¿Puedo preguntar por qué funciona cuando lo escribo manualmente pero no en una variable?

¡Gran pregunta! Examinemos los comandos que escribiste:

$ 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

La razón por la que esto no funciona es porque Bash no analiza las comillas dentro de las expansiones de variables. Eso lo hace realizar la división de palabras, por lo que los espacios en blanco en las expansiones de variables sin comillas se toman como separadores de palabras. Eso no analizar las comillas de ninguna manera, lo que significa que no puede poner comillas dobles dentro de una variable para anular la división de palabras.

$ cd $DOCS

Debido a esto, cd se pasan dos parámetros. Hasta cd sabe que parece que escribiste:

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

Dos parámetros, con comillas dobles intactas.

SOLUCIÓN:

cd "Documents and Photos"

problema resuelto.

La razón por la que envío esta respuesta es que encontrará que los usuarios de todos los días (no solo desarrolladores web, programadores o usuarios avanzados) utilizan StackOverflow y este fue el resultado número uno para una pregunta simple de un usuario de Windows en Google.

Las personas son cada vez más conocedoras de la tecnología, pero no necesariamente están familiarizadas con la línea de comandos en los casos anteriores.

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

Aquí está tu primer problema. Esto pone un carácter de barra invertida real en $DOCScomo puede ver ejecutando este comando:

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

Al definir DOCS, necesita escapar del carácter de espacio. Puedes citar el string (usando comillas simples o dobles) o puede escapar solo el carácter de espacio con una barra invertida. No puedes hacer ambas cosas. (En la mayoría de los sistemas similares a Unix, puede tener una barra invertida en el nombre de un archivo o directorio, aunque no es una buena idea. En Cygwin o Windows, es un delimitador de directorio. Pero voy a asumir que el nombre real del directorio es my dirno my dir.)

$ cd $DOCS

Esto pasa dos argumentos a cd. El primero es cygdrive/c/Users/myy el segundo es dir/Documents. Sucede que cd ignora silenciosamente todo menos su primer argumento, lo que explica el mensaje de error:

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

Para establecer $DOCS al nombre de tu Documents directorio, haga cualquiera de estos:

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

Una vez que haya hecho eso, para cambiar a su Documents directorio, encierre la referencia de la variable entre comillas dobles (esa es una buena idea para ningún referencia variable en bash, a menos que esté seguro de que el valor no tiene caracteres divertidos):

$ cd "$DOCS"

También puede considerar darle un nombre a ese directorio sin espacios, aunque eso puede ser difícil de hacer en general en Windows.

Aquí tienes las comentarios y puntuaciones

Recuerda algo, que tienes la capacidad de valorar este ensayo si diste con el arreglo.

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *