0

我如何指示期望在流中查找类似“Generating foo- [pattern] .tgz”的内容并返回该模式,以便我可以在以后的命令中使用它?

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

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

我是新手,仍然在示例中磕磕绊绊,偶尔仍然需要一些帮助。非常感谢任何建议/帮助。

4

1 回答 1

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。

于 2013-01-01T18:04:47.110 回答