Estoy usando Bash en macOS X y me gustaría crear un archivo de script ejecutable simple que cambiaría a otro directorio cuando se ejecuta. Sin embargo, la ruta a ese directorio tiene espacios. ¿Cómo diablos haces esto? Esto es lo que tengo...
Nombre del archivo: cdcode
Contenido del archivo:
cd ~/My Code
Ahora bien, este no es un nombre de ruta largo, pero mi nombre de ruta real tiene cinco directorios de profundidad y cuatro de esos directorios tienen espacios en la ruta.
Por cierto, lo he intentado cd "~/My Code"
y cd "~/My\ Code"
y ninguno de ellos funcionó.
Respuestas:
Cuando cita dos veces una ruta, detiene la expansión de tilde. Entonces, hay algunas formas de hacer esto:
La tilde no se cita aquí, por lo que aún se ejecutará la expansión de tilde.
Puede expandir las variables de entorno dentro de cadenas entre comillas dobles; esto es básicamente lo que está haciendo la expansión de tilde
También puede escapar de los caracteres especiales (como el espacio) con una barra invertida.
fuente
Encontré la solución a continuación en esta página :
¡Una combinación de
\
una constante de texto entre comillas dobles y uneval
antescd
hace que funcione como un encanto!fuente
eval
aquí.eval
.parece funcionar para mí ... Si soltar las comillas pero mantener la barra no funciona, ¿puede publicar algún código de muestra?
fuente
Puede utilizar cualquiera de:
No se puede usar:
El primero funciona porque el shell se expande ~ / en $ HOME /, y luego agrega My Code sin las comillas dobles. El segundo falla porque no hay un usuario llamado '
"
' (comillas dobles) para~"
mapear.fuente
Después de luchar con el mismo problema, probé dos soluciones diferentes que funcionan:
1. Utilice comillas dobles (
""
) con sus variables.La forma más fácil simplemente comillas dobles sus variables como se señaló en la respuesta anterior:
2. Hacer uso de
eval
.De acuerdo con este comando de respuesta de Unix para escapar de los espacios , puede quitar el espacio en blanco y luego usarlo
eval
, así:fuente
Una sola barra invertida me funciona:
¿Está seguro de que el problema no es que su script de shell esté cambiando de directorio en su subshell, pero luego regresará al shell principal (y al directorio original) cuando haya terminado? Evité eso usando. para ejecutar el script en el shell actual, aunque la mayoría de la gente solo usaría un alias para esto. Los espacios podrían ser una pista falsa.
fuente
Evite ~ en los scripts; use $ HOME en su lugar.
fuente
Cuando se trabaja en Linux, la sintaxis siguiente es correcta:
cd ~/My\ Code
Sin embargo, cuando esté ejecutando su archivo, use la sintaxis siguiente:
$ . cdcode
(solo '.' y no './')
fuente
usar comillas dobles
fuente
.bashrc
archivo para cambiar de directorio al pegar nombres de directorio que contienen espacios en la línea de comando sin tener que escapar de los espacios o citar todo.cds
aunque es un mejor nombre.go
sea equivalente acd
, es decir, cd al directorio de inicio?La forma más sencilla de hacer esto es-
En bash, ejecute el comando DIR y en los resultados verá que los nombres de carpeta o ruta que tienen espacio entre ellos se han escrito en los resultados de esta manera:
fuente
Esto lo hará:
Tuve que usar eso para trabajar con archivos almacenados en iCloud Drive. No querrás usar comillas dobles (") ya que entonces debe ser una ruta absoluta. En otras palabras, no puedes combinar comillas dobles con tilde (~).
A modo de ejemplo, tuve que usar esto para un proyecto reciente:
Espero que eso ayude.
fuente
Tuve un problema similar ahora donde estaba usando un script bash para volcar algunos datos. Terminé creando un enlace simbólico en la carpeta del script sin espacios en él. Luego señalé mi guión al enlace simbólico y eso funciona bien.
Para crear su enlace. ln -s [DIRECTORIO O ARCHIVO DE OBJETIVO] ./[CUTCUT]
Mau o puede que no sea de utilidad.
fuente
Utilice comillas simples, como:
fuente