我正在尝试将变量从本地服务器(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都是未定义的。此外,我不想手动键入位置路径,因为它们可能随时更改,如果手动完成,在代码中更改它们会很麻烦。
答案 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