Sintaxe ímpar para o comando ssh e bash to run

2

Sou muito novo no shell / bash scripting e estou escrevendo um script no OSX para automatizar alguns esforços tediosos. Estou tentando executar uma parte do meu script em um host remoto usando ssh . Há um script comum em ambas as máquinas, que chamarei de ascript . Em ambas as máquinas, esse script está em / usr / local / bin.

Eu sei que preciso do caminho completo para ascript no meu host remoto para executá-lo da seguinte forma:

ssh user@otherHost bash -c "/usr/local/bin/ascript --FlagToDoSomething"

No entanto, descobri que --FlagToDoSomething só é executado corretamente se eu escrevê-lo da seguinte maneira no meu script:

ssh user@otherHost bash -c " /usr/local/bin/ascript --FlagToDoSomething"

(ou seja, ele precisa de uma nova linha após as aspas abertas) Recebo uma mensagem na janela do Terminal dizendo bash: -c: option requires an argument , mas o restante continua a ser executado e recebo a saída que estou esperando. Se eu não fizer isso, eu só obtenho a saída como se eu tivesse acabado de digitar ascript e aperte enter (então as informações de uso).

Se eu remover bash -c , ele funciona corretamente, mas estou apenas fazendo isso porque, por qualquer motivo: %código% tenta executar essa função no host local, o que causa alguma saída funky. E eu preciso executar vários comandos no host remoto antes de terminar minha conexão ssh.

Obrigado!

    
por bocks 12.08.2015 / 00:12

2 respostas

4
ssh user@otherHost "output=$(/usr/local/bin/ascript --FlagToDoSomething; echo \$output)"

O que diabos é que isso deveria fazer? $output ainda não está definido, pois o eco está dentro do $(command substitution) .

Além disso, $() é expandido pelo shell entre aspas duplas. É por isso que ele é executado localmente. Use aspas simples para evitá-lo.

Talvez você queira

output=$(ssh u@oh '/usr/local/bin/ascript --FlagToDoSomething')
    
por 12.08.2015 / 00:29
0

Remova "-c" e coloque a coisa toda entre aspas:

output=$(ssh [email protected] "bash /usr/local/bin/ascript --testable=fly"); 

echo $output;
    
por 12.08.2015 / 00:21