从期望输出中提取模式

时间:2012-10-20 20:12:59

标签: expect

如何指示期望在流中查找“生成foo- [pattern] .tgz”之类的内容并返回模式以便在将来的命令中使用它?

我发现自己反复执行相同的操作,并希望使用expect自动执行它们。我ssh到一个系统上并在其上运行一个生成文件的脚本,然后我将该系统中的文件scp到另外两个系统上。

我可以生成ssh并成功触发文件构建。我不确定如何捕获生成的文件的名称来执行复制。该脚本输出类似“生成foo- 时间戳 .tgz ...完成”的内容。并且 timestamp 在运行之间明显不同,我不想使用glob scp(即scp foo-*tgz),因为可能存在过时的foo文件(因此是时间戳)。

我是新人,期待并仍然磕磕绊绊的例子等等,偶尔还需要一点点牵手。任何建议/帮助都非常感谢。

1 个答案:

答案 0 :(得分:2)

我不知道我们是否可以捕获模式,但在这种情况下我通常做的是将输出存储在变量中然后使用此输出。例如,如果send -- "./executeSomeScript\r"将提供类似“Generating foo-timestamp.tgz ... Done”的输出,我将用

替换send命令
send -- "output=`./executeSomeScript`\r"
send -- "filename=`echo \$output | awk '{ print \$2 }'\r"

最后

send -- "scp \$filename user@server:path\r"

请注意,必须转义$,以便不在脚本级别解释它,而是以文字形式发送到远程shell。