Как передать переменную с локального сервера на удаленный?

Я пытаюсь передать переменную с моего локального сервера (location1) на удаленный сервер (location2). Цель кода - скопировать файл с удаленного сервера из заранее определенного места. Проще говоря, я хочу скопировать файлы из location2 в location1, используя предопределенный путь, где location1 находится на локальном сервере, а location2 - на удаленном сервере. См. Сегмент кода:

 $location1=somewhere/on/local_server
 $location2=somewhere/on/remote_server

 sshpass -p "password" ssh [email protected] 'su -lc "cp -r $location2 $location1";'

Я получаю сообщение об ошибке, что и $ location1, и $ location2 не определены. Кроме того, я НЕ хочу вручную вводить пути к местоположению, потому что они могут измениться в любое время, и было бы сложно изменить их в коде, если бы это было сделано вручную.


person Redson    schedule 02.06.2014    source источник


Ответы (3)


Ты можешь сделать:

sshpass -p "password" ssh [email protected] "su -lc \"cp -r $location2 $location1\""
person anubhava    schedule 02.06.2014

Вы можете попробовать разрешить удаленной оболочке читать переменные из ввода:

location1=somewhere/on/local_server
location2=somewhere/on/remote_server
printf '%s\n%s\n' "$location1" "$location2" | \
    sshpass -p "password" ssh [email protected] 'read location1; read location2; su -lc "cp -r \"$location2\" \"$location1\"";'

Обратите внимание, что я добавил двойные кавычки к переменным. Это может работать, даже если в именах путей есть пробелы.

person konsolebox    schedule 02.06.2014

В объявлении location1 / 2 есть синтаксическая ошибка. Знак «$» нельзя использовать при присвоении значения. Вот почему вы получаете неопределенное значение:

location1=somewhere/on/local_server
location2=somewhere/on/remote_server
person earizon    schedule 02.06.2014