Função Bash para scp um arquivo não está funcionando

2

Eu escrevi a seguinte função bash:

function to_company() 
{
    scp ${1} [email protected]://home/username 
}

Quando faço:

$ to_company code_diff.txt 

Ele pede senha e falha com a seguinte mensagem:

scp: //home/username: not a regular file 

Eu tentei dar //home/username/ & //home/username/${1} no script, mas obteve o mesmo resultado.

Se eu executar manualmente o comando acima e passar code_diff.txt no lugar de ${1} , o arquivo será transferido sem problemas.

Que erro estou fazendo?

    
por Bhaskar 14.08.2013 / 21:10

2 respostas

2

Não que isso deva importar, mas o caminho remoto deve ser /home/username (barra única). E como mencionado, cite seu ${1} com "${1}" .

Eu copiei o mesmo comando e ele funciona quando eu testo, então suspeito (dado o erro "não um arquivo regular") que você tem um espaço extra entre [email protected]: e //home/username .

Outra coisa a tentar é adicionar a depuração (fornecendo -v no comando scp) e ver se isso der alguma pista:

function to_company() 
{
    scp -v "${1}" [email protected]:/home/username 
}
    
por 14.08.2013 / 21:27
0

Você está se aproximando disso da maneira errada. Em vez de escrever um wrapper de shell, defina um alias de host em seu ~/.ssh/config .

Host work
Hostname long.server.name.company.com
Username bob

Em seguida, copie um arquivo para o servidor da sua empresa:

scp filename.ext work:

O caminho remoto é relativo ao seu diretório pessoal, então work: significa a mesma coisa que work:/home/username .

Sua função falhará se você passar um argumento que contenha espaços em branco ou caracteres globbing \[?* . Isso é facilmente corrigido colocando a expansão de parâmetro entre aspas duplas: "$1" . Sempre coloque aspas duplas em torno das substituições de variáveis e comandos .

Outro problema em potencial é que // no início de um caminho pode ser interpretado de forma especial. Normalmente, barras consecutivas em um caminho são equivalentes a uma barra, mas um caminho que começa com exatamente duas barras tem um significado especial em alguns sistemas .

    
por 15.08.2013 / 01:55