我有一个如下的简单脚本,使用expect
来rsync一些数据(通过ssh)。代码如下:
local_path1="/root/accordingtojim.txt"
username="ih4d35"
ip="10.0.0.152"
port="22"
password="t3tr@h3dr0n"
echo "$local_path1 $username $ip $port $password"
expect -c 'spawn rsync -avz -e "ssh -p $port" $local_path1 $username\@$ip:~/; expect '*?assword:*' {send \"$password\r\"; interact};'
这是我得到的错误:
can't read "port": no such variable
while executing
"spawn rsync -avz -e "ssh -p $port" $local_path1 $username\@$ip:~/"
echo
语句可以正常工作。
我做错了什么?
答案 0 :(得分:3)
Shell变量不会在单引号之间展开,因此请删除它们并用转义的引号替换嵌套引号:
expect -c "spawn rsync -avz -e \"ssh -p $port\" $local_path1 $username\@$ip:~/; expect '*?assword:*' {send \"$password\r\"; interact};"