bash和expect - 在rsyncing时不接受端口

时间:2013-10-29 09:19:51

标签: bash ssh expect rsync

我有一个如下的简单脚本,使用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语句可以正常工作。

我做错了什么?

1 个答案:

答案 0 :(得分:3)

Shell变量不会在单引号之间展开,因此请删除它们并用转义的引号替换嵌套引号:

expect -c "spawn rsync -avz -e \"ssh -p $port\" $local_path1 $username\@$ip:~/; expect '*?assword:*' {send \"$password\r\"; interact};"