【问题标题】:output from expect is not complete期望的输出不完整
【发布时间】:2015-11-05 17:38:33
【问题描述】:

我有这个脚本是为了与另一台服务器进行rsync,建议是获取大约1600个文件,这个脚本作为两个变量,日期和小时,所以,我用shell脚本发送这两个值然后我传递这些值.

期望脚本:

#!/usr/bin/expect

set DIR_DATE [lrange $argv 0 0]
# Define date variable.

set DT_HOUR [lrange $argv 1 1]
# Define hour variable.

spawn rsync -avzb -e ssh user@IPSERVER:/SOURCE_DIR/$DIR_DATE/A$DIR_DATE.$DT_HOUR*.txt /TARGET_DIR/$DIR_DATE/
expect "password:"
send "PASSWORD\r"
#interact
expect eof

而shell脚本是:

#!/bin/bash

***HERE is the code to get date and hour variable: DT_DATE,DT_HOUR; then, next step is run the expect script***

${DIR_BIN}/rsync_expect.sh ${DT_DATE} ${DT_HOUR}

你可以注意到,在期望脚本中,我注释了“交互式”这个词,因为:

  1. 如果不注释,手动运行脚本,运行非常好,得到1600个文件。
  2. 如果它被注释,并通过 shell 脚本运行,它只会得到 arround 50 个文件,然后就关闭了。

那么,有什么建议可以使用 shell 脚本获取所有文件吗?

【问题讨论】:

  • 问题是为什么在没有交互的情况下脚本会提前退出?这可能是预期的超时。尝试设置无限(或至少更长)超时。

标签: linux shell expect rsync


【解决方案1】:

您可能会超时:50 个文件可能是您可以在(默认)10 秒内传输的内容。在生成之前添加:set timeout -1

“.sh”对于期望脚本来说是一个错误的文件扩展名:使用“.exp”

lrange 命令返回一个列表。使用lassign $argv DIR_DATE DT_HOUR

【讨论】:

  • 谢谢格伦,我做了你所建议的改变,但是,当我使用“设置超时 -1”时,永远不会开始。只有消息密码,然后,只有提示在闪烁。
  • 文件是否正在传输?你可能什么都看不到,因为你没有expecting 任何东西。如果你想看世界过去,最好的可能是使用interact
最近更新 更多