如何将变量从本地服务器传递到远程服务器?

时间:2014-06-02 14:18:45

标签: linux bash shell scripting suse

我正在尝试将变量从本地服务器(location1)传递到远程服务器(location2)。代码的目的是从预定义位置复制远程服务器中的文件。简单来说,我想使用预定义路径将文件从location2复制到location1,其中location1在本地服务器上,而location2是远程服务器。请参阅代码段:

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

 sshpass -p "password" ssh username@74.11.11.11 'su -lc "cp -r $location2 $location1";'

我得到的错误是$ location1和$ location2都是未定义的。此外,我不想手动键入位置路径,因为它们可能随时更改,如果手动完成,在代码中更改它们会很麻烦。

3 个答案:

答案 0 :(得分:3)

你可以这样做:

sshpass -p "password" ssh username@74.11.11.11 "su -lc \"cp -r $location2 $location1\""

答案 1 :(得分:1)

您可以尝试让远程shell从输入中读取变量:

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

注意我在变量中添加了双引号。即使路径名上有空格,它也可以工作。

答案 2 :(得分:1)

您的location1 / 2声明有语法错误。 " $"分配值时不得使用。这就是为什么你得到一个未定义的值:

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