Execute um script local em um servidor remoto usando ssh sem precisar se preocupar com citações

4

Por isso, tenho executado scripts locais em um servidor remoto:

ssh user@server "'cat local-script.sh'"

No entanto, hoje eu tenho um script que tem aspas simples e duplas nele. O que faz com que o script falhe porque a saída de cat local-script.sh está agrupada entre aspas. Sem modificar o próprio script, existe uma maneira melhor de lidar com isso?

Eu achei que isso funcionaria:

ssh user@server $(<local-script.sh)

Mas parece que não faz nada ...

    
por Michael Irey 28.06.2013 / 18:02

3 respostas

3

Com o seguinte script de teste:

#!/bin/bash
uname -n
a=(b c 'd e' f)
echo "${#a[@]}"
b=(1 "2 3" 4)
echo "${#b[@]}"

A saída deve ser o nome do host remoto seguido por 4 e 3 quando executado usando:

ssh user@server "$(<scriptname)"

Isso mostra que as aspas dentro do script estão sendo manipuladas corretamente. Se as cotações não estivessem sendo manipuladas corretamente, a saída dos números seria 5 e 4 devido à divisão de palavras. Observe as aspas em torno da substituição de comandos.

A propósito, o primeiro comando que você postou não funciona. As aspas simples impedem que os backticks sejam avaliados localmente.

    
por 28.06.2013 / 18:56
8
cat local-script.sh | ssh user@server bash

ou qualquer shell que você queira usar ao invés de bash

    
por 28.06.2013 / 18:06
1

Suponha que o script esteja no arquivo script.sh. O que diabos é o problema com a execução:

 ssh -T [email protected] <script.sh

Isso funciona para mim!

    
por 28.06.2013 / 18:54

Tags