下面是我的代码:
#!/usr/bin/expect -f
set timeout -1
spawn rsync -arvz -e 'ssh -p 1690' --protect-args --progress /home/pappu/ '[email protected]:/volume1/56 - Backup Server/pappu'
expect "password:"
send "******/r"
expect eof
脚本有+x
权限,我正在执行它,如下所示:
~]# ./rsync-backup.sh
它给了我以下输出:
spawn rsync -arvz -e 'ssh -p 1690' --protect-args --progress /home/pappu/ '[email protected]:/volume1/56 - Backup Server/pappu'
Unexpected remote arg: '[email protected]:/volume1/56
rsync error: syntax or usage error (code 1) at main.c(1201) [sender=3.0.6]
send: spawn id exp4 not open
while executing
"send xxxxxx/r"
(file "./rsync-backup.sh" line 5)
我尝试在 rsync 的远程路径中添加双引号,还尝试添加带有单引号和双引号的斜杠。 (它只是更改错误消息)。
答案1
expect
是用tcl
语言编写的,因此包含空格的字符串必须用双引号"
而不是单引号引起来'
。因此,将您的生成线替换为
spawn rsync -arvz -e "ssh -p 1690" --protect-args --progress /home/pappu/ "[email protected]:/volume1/56 - Backup Server/pappu"
另外,正如@steeldriver提到的,写了一个回车符\r
,所以你可能想要
send "******\r"