Problemas en el script con espacios en el nombre del archivo

11

Tengo un script que scp es un archivo de host remoto a local. A veces los nombres de los archivos contienen espacios. A scp no le gustan los espacios en sus nombres de archivo. Por alguna razón, mis intentos de manejar los espacios no han resultado en la ruta scp correcta.

Código:

PATH=/var/root/Documents/MyFile OG-v1.2.3.pkg
scp $PATH Me@10.1.10.33:/Users/Me/Desktop

Resultados en

Cannot find directory: var/root/Documents/MyFile
Cannot find directory: OG-v1.2.3.pkg

El encerrar la RUTA entre comillas "$PATH"da el mismo error.

Cambiar los espacios por espacios escapados tampoco funciona, aunque, por lo que puedo decir, debería:

ESC_PATH=${PATH/' '/'\ '}

aunque imprimir la ruta de escape muestra que la edición funcionó:

echo $ESC_PATH
> /var/root/Documents/MyFile\ OG-v1.2.3.pkg
Miles Alden
fuente
44
No lo use $PATHpara sus propias variables, porque su terminal lo necesita.
Bernhard

Respuestas:

19

Debe citar tanto la declaración como el uso.

path="/var/root/Documents/MyFile OG-v1.2.3.pkg"
scp "$path" Me@10.1.10.33:/Users/Me/Desktop

Si no cita la primera, $pathcontendrá solo la primera parte. Si no cita la segunda, scptratará cada parte separada por espacios como un argumento.

(He cambiado $PATHa $pathporque $PATHes una variable reservada importante y no debe usarla para fines generales).

Matteo
fuente
1
¡Perfecto! Muchas gracias a @Matteo. Resulta que también había un espacio prefijado arrojándole una llave también.
Miles Alden
1

Estaba intentando algo muy similar con ssh y pasando una línea de comando a través de él. p.ej

ssh <somehost> ls -l "$PATH"

Descubrí que simplemente definir "$ PATH" no funcionaba, todavía arrojaba errores. Sin embargo si corriera

ssh <somehost> ls -l "\"$PATH"\"

Esto funcionó. El truco consiste en garantizar que se pase un conjunto adicional de "" al comando ssh desde el shell.

Roland Ward
fuente