Problema no script com espaços no nome do arquivo

10

Eu tenho um script que scp é um arquivo do host remoto de volta ao local. Às vezes, os nomes dos arquivos contêm espaços. scp não gosta de espaços em seus nomes de arquivos. Por alguma razão, minhas tentativas de manipular os espaços não resultaram no caminho correto do scp.

Código:

PATH=/var/root/Documents/MyFile OG-v1.2.3.pkg
scp $PATH [email protected]:/Users/Me/Desktop

Resultados em

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

Incluindo o PATH entre aspas "$PATH" fornece o mesmo erro.

Trocar os espaços para espaços com escape também não está funcionando, embora, até onde eu saiba, ele deva:

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

embora a impressão do caminho de escape mostre que a edição funcionou:

echo $ESC_PATH
> /var/root/Documents/MyFile\ OG-v1.2.3.pkg
    
por Miles Alden 07.12.2012 / 06:09

2 respostas

14

Você deve citar a declaração e o uso

path="/var/root/Documents/MyFile OG-v1.2.3.pkg"
scp "$path" [email protected]:/Users/Me/Desktop

Se você não citar o primeiro, $path conterá apenas a primeira parte. Se você não citar o segundo, scp tratará cada parte separada por espaço como um argumento.

(Eu mudei $PATH para $path porque $PATH é uma variável reservada importante e você não deve usá-la para propósitos gerais.)

    
por 07.12.2012 / 07:19
1

Eu estava tentando algo muito parecido com o ssh e passando uma linha de comando através dele. por exemplo.

ssh <somehost> ls -l "$PATH"

Descobri que a simples definição de "$ PATH" não funcionava - ainda gerava erros. No entanto, se eu corri

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

Isso funcionou. O truque é garantir que um conjunto adicional de "" seja passado para o comando ssh a partir do shell.

    
por 18.02.2015 / 10:51