Menjalankan perintah dengan skrip ssh dan shell menggunakan variabel pada mesin jarak jauh

8

Saya ingin menjalankan perintah dan skrip yang terletak di mesin jarak jauh dengan skrip di mesin lokal. Saya tahu itu mungkin untuk mengeksekusi perintah semacam ini ssh, jadi saya membuat:

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

Ini bekerja dengan sempurna. Saya ingin skrip ini menjadi lebih umum, menggunakan variabel. Sekarang adalah:

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

Dan saya mendapatkan kesalahan ini: bash: ./: is a directory

Saya kira mesin jarak jauh tidak tahu variabel-variabel ini. Jadi apakah ada cara untuk mengekspornya ke target?

Jean-Baptiste Martin
sumber

Jawaban:

7

Saya tidak tahu cara mudah ekspor variabel lingkungan target, tetapi naskah Anda mungkin bekerja jika Anda mengganti 'dengan ". Dengan 's string 'cd ${LOCATION}; ./${EXEC}'dilewatkan kata demi kata, tetapi dengan

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

substitusi variabel dilakukan secara lokal.

Perhatikan bahwa nilai-nilai LOCATIONdan EXECditeruskan ke shell jauh, jadi ini hanya berfungsi jika mereka tidak mengandung karakter khusus shell.

isido
sumber