为什么不能使用 expect 将文件传输到远程 vps?
Why can't tranfer file into the remote vps with expect?
expect已安装,it_a_test
为vps密码
scp /home/wpdatabase_backup.sql root@vps_ip:/tmp
该命令可以将文件 /home/wpdatabase_backup.sql 传输到我的 vps_ip:/tmp.
现在我将流程重写为以下代码:
#!/usr/bin/expect -f
spawn scp /home/wpdatabase_backup.sql root@vps_ip:/tmp
expect "password:"
send it_is_a_test\r
为什么不能使用 expect 将我的文件传输到远程 vps_ip?
基本上,expect
将使用两个可行的命令,例如 send
和 expect
。在这种情况下,如果使用 send
,则之后必须有 expect
(在大多数情况下)。 (反之亦然不是强制性的)
这是因为如果没有它,我们将错过派生过程中发生的事情,因为 expect
将假设您只需要发送一个字符串值,而不期望来自会话,使脚本退出并导致失败。
所以,你只需要添加一个expect
来等待scp
命令的关闭,这可以通过等待eof
(文件结束)来执行。
#!/usr/bin/expect -f
spawn scp /home/wpdatabase_backup.sql root@vps_ip:/tmp
expect "password:"
send "it_is_a_test\r"
expect eof; # Will wait till the 'scp' completes.
注:
expect 中的默认超时为 10 秒。因此,如果 scp
在 10 秒内完成,则没有问题。假设,如果操作花费的时间超过此,则expect
将超时并退出,从而使scp
传输失败。因此,您可以根据需要设置增加超时时间,可以将其修改为
set timeout 60; # Timeout is 1 min
expect已安装,it_a_test
为vps密码
scp /home/wpdatabase_backup.sql root@vps_ip:/tmp
该命令可以将文件 /home/wpdatabase_backup.sql 传输到我的 vps_ip:/tmp.
现在我将流程重写为以下代码:
#!/usr/bin/expect -f
spawn scp /home/wpdatabase_backup.sql root@vps_ip:/tmp
expect "password:"
send it_is_a_test\r
为什么不能使用 expect 将我的文件传输到远程 vps_ip?
基本上,expect
将使用两个可行的命令,例如 send
和 expect
。在这种情况下,如果使用 send
,则之后必须有 expect
(在大多数情况下)。 (反之亦然不是强制性的)
这是因为如果没有它,我们将错过派生过程中发生的事情,因为 expect
将假设您只需要发送一个字符串值,而不期望来自会话,使脚本退出并导致失败。
所以,你只需要添加一个expect
来等待scp
命令的关闭,这可以通过等待eof
(文件结束)来执行。
#!/usr/bin/expect -f
spawn scp /home/wpdatabase_backup.sql root@vps_ip:/tmp
expect "password:"
send "it_is_a_test\r"
expect eof; # Will wait till the 'scp' completes.
注:
expect 中的默认超时为 10 秒。因此,如果 scp
在 10 秒内完成,则没有问题。假设,如果操作花费的时间超过此,则expect
将超时并退出,从而使scp
传输失败。因此,您可以根据需要设置增加超时时间,可以将其修改为
set timeout 60; # Timeout is 1 min