(6 respuestas)
Cerrado hace 6 años.
Estoy tratando de escapar del carácter de espacio para una ruta en Bash, pero ni el uso de una barra invertida ni las comillas funcionan.
Guión .sh:
ROOT="/home/hogar/Documents/files/"
FILE=${ROOT}"bdd.encrypted"
DESTINATION="/home/hogar/Ubuntu\ One/folder"
mv ${FILE} ${DESTINATION}
Después de ejecutar el script (./file
) este es el resultado:
mv: target 'One/folder' is not a directory
¿Por qué mv
comando dividir la cadena, y ¿cómo evito que esto suceda?
Respuesta aceptada:
Estás expandiendo la variable DESTINO, si hiciste echo
esto es lo que obtendrías:
echo ${DESTINATION}
/home/hogar/Ubuntu\ One/folder
Pero mv
no entiende esto:
mv ${FILE} ${DESTINATION}
mv: cannot move '/home/hogar/Documents/files/bdd.encrypted' to '/home/hogar/Ubuntu\\ One/folder': No such file or directory
(por alguna razón, mi mv es más detallado)
Para evitar esto, debe usar comillas en su lugar:
mv "${FILE}" "${DESTINATION}"
Si no necesita expansión (ya que ya se está expandiendo antes), simplemente use "$..."
debería ser suficiente:
mv "$FILE" "$DESTINATION"