renombrar - BASH Script para cd al directorio con espacios en pathname
espacios en blanco en cmd (12)
¡Oye! Vi esto en http://www.askdavetaylor.com/can_my_path_include_directory_names_with_spaces.html
x = "prueba / me"
eval cd $ x
Una combinación de / en una constante de texto de doble cita y un "eval" antes de "cd" hace que funcione como un hechizo.
Argggg. He estado luchando con este estúpido problema por días y no puedo encontrar una respuesta.
Estoy usando BASH en Mac OS X y me gustaría crear un archivo de script ejecutable simple que cambiaría a otro directorio cuando se ejecute. 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 ruta real es de cinco directorios profundos y cuatro de esos directorios tienen espacios en la ruta.
Por cierto, he intentado cd "~/My Code"
y cd "~/My/ Code"
y ninguno de estos funcionó.
Cuando cite una ruta doble, está deteniendo la expansión de la tilde. Entonces hay algunas maneras de hacer esto:
cd ~/"My Code"
cd ~/''My Code''
La tilde no se cita aquí, por lo que la expansión de tilde seguirá ejecutándose.
cd "$HOME/My Code"
Puede expandir variables de entorno dentro de cadenas de comillas dobles; esto es básicamente lo que está haciendo la expansión tilde
cd ~/My/ Code
También puede escapar caracteres especiales (como espacio) con una barra diagonal inversa.
Cuando se trabaja bajo Linux, la siguiente sintaxis es correcta:
cd ~/My/ Code
Sin embargo, cuando esté ejecutando su archivo, use la siguiente sintaxis:
$ . cdcode
(solo ''.'' y no ''./'')
Después de luchar con el mismo problema, probé dos soluciones diferentes que funcionan:
- Solución1: La manera más fácil simplemente comillas dobles sus variables como se indicó en la respuesta anterior
cd "$yourPathWithBlankSpace"
- Solución2: de acuerdo con este comando de respuesta de Unix para escapar de espacios , puede quitar espacio en blanco y luego hacer uso de Eval, como este:
yourPathEscaped=$(printf %q "$yourPathWithBlankSpace")
+ eval cd $yourPathEscaped
Evitar ~ en scripts; use $ HOME en su lugar.
La forma muy simple de hacer esto es-
$ cd My/ Folder
En bash, ejecute el comando DIR y en los resultados verá que la carpeta o los nombres de ruta que tienen espacio entre ellos se ha escrito en los resultados de esta manera:
$dir
My/ Folder
New/ Folder
Puede usar cualquiera de:
cd ~/"My Code"
cd ~/M"y Code"
cd ~/My" Code"
No puede utilizar:
cd ~"/My Code"
El primero funciona porque el shell se expande ~ / en $ HOME /, y luego hace tachuelas en My Code sin las comillas dobles. El segundo falla porque no hay un usuario llamado '' "
'' (comilla doble) para ~"
para mapear.
Tuve un problema similar ahora que estaba usando un script bash para volcar algunos datos. Terminé creando un enlace simbólico en la carpeta de scripts sin ningún espacio en él. Luego apunté mi guión al enlace simbólico y eso funciona bien.
Para crear tu enlace ln -s [DIRECTORIO DE OBJETIVO O ARCHIVO] ./[SHORTCUT]
Mau o puede que no sea de uso.
Una sola barra invertida funciona para mí:
ry4an@ry4an-mini:~$ mkdir "My Code"
ry4an@ry4an-mini:~$ vi todir.sh
ry4an@ry4an-mini:~$ . todir.sh
ry4an@ry4an-mini:My Code$ cat ../todir.sh
#!/bin/sh
cd ~/My/ Code
¿Estás seguro de que el problema no es que tu script de shell esté cambiando de directorio en su subshell, sino que estás de vuelta en el shell principal (y en el directorio original) cuando termines? Lo evité usando. para ejecutar el script en el shell actual, aunque la mayoría de las personas solo usarían un alias para esto. Los espacios podrían ser una pista falsa.
Use comillas simples, como:
myPath=~/''my dir''
cd $myPath
usar comillas dobles
go ()
{
cd "$*"
}
cd ~/My/ Code
parece funcionar para mí ... Si omitir las comillas pero mantener la barra no funciona, ¿puedes publicar algún código de muestra?