Executando comandos com script ssh e shell usando variáveis ​​em uma máquina remota

8

Eu gostaria de executar um comando e script localizado em uma máquina remota com um script em uma máquina local. Eu sei que é possível executar esse tipo de comando com ssh, então eu fiz:

#!/bin/bash
ssh username@target 'cd locationOf/theScript/; ./myScript.sh'

Funciona perfeitamente. Eu gostaria que esse script fosse mais genérico, usando variáveis. Agora é:

#!/bin/bash
LOCATION=locationOf/theScript/
EXEC=myScript.sh
ssh username@target 'cd ${LOCATION}; ./${EXEC}'

E eu recebo este erro: bash: ./: is a directory

Eu acho que a máquina remota não conhece essas variáveis. Então, existe uma maneira de exportá- los para o destino?

Jean-Baptiste Martin
fonte

Respostas:

7

Não conheço uma maneira fácil de exportar variáveis ​​ambientais para o destino, mas seu script poderá funcionar se você substituir 'por ". Com 's a string 'cd ${LOCATION}; ./${EXEC}'é passada literalmente, mas com

ssh username@target "cd ${LOCATION}; ./${EXEC}"

substituição de variável é feita localmente.

Observe que os valores de LOCATIONe EXECsão passados ​​para o shell remoto, portanto, isso só funciona se eles não contiverem caracteres especiais do shell.

isido
fonte