scp e quebra de linha em um script de shell

3

Eu tenho um arquivo .sh , contendo um comando, que copia um arquivo do servidor remoto para um diretório específico, preservando o nome do arquivo original, e a segunda linha é apenas um comentário:

scp (host):~/filename.sql ~/
# just a comment

Eu nomeio o script dbcopy.sh , coloco no meu diretório home e executo do console como:

sh ~/dbcopy.sh

O problema é devido a uma quebra de linha após o comando scp, o arquivo que está sendo copiado tem um nome que consiste em um caractere (na listagem abaixo é exibido como um ponto de interrogação) em vez de um nome original!

console> ls -l ~
...
-rw-rw-r--  1 (user)  (group)   158327960 26 oct 17:28 ?

Se eu remover qualquer quebra de linha após o comando scp , tudo funcionará como esperado.

Como devo lidar com essa situação?

    
por 1234ru 24.10.2016 / 10:45

2 respostas

2

O problema era o delimitador de término de linha no meu editor: ele usava \r\n sequence em vez de apenas \n . Assim, o último argumento do comando scp não foi apenas ~/ conforme exibido. Na verdade, foi ~/\r .

Então, em vez de passar um nome de diretório com uma barra (o que instruiria o comando a copiar um arquivo para esse diretório preservando o nome de um arquivo - o comportamento que eu esperava), mais alguns foram adicionados após a barra - um \r de caracteres, o que levou o comando a aceitá-lo como um novo nome para o arquivo que está sendo copiado.

    
por 31.10.2016 / 20:04
0

Você não incluiu o script nem as informações sobre como você está executando o script. Não sei se você está chamando de um cronjob ou de um usuário diferente.

Dito isto, o seguinte script de teste muito básico (t.sh) funciona perfeitamente para mim no FreeBSD.

#!/bin/sh
echo "Pre test"
scp spider.goo:~/tColor.c ~/
echo "Post test"

Ligue assim:

sh ./t.sh

Com a seguinte saída:

Pre test
Password for tigger@spider:
tColor.c       100% 1805     1.8KB/s   00:00    
Post test
    
por 25.10.2016 / 00:20

Tags