如何指示期望在流中查找“生成foo- [pattern] .tgz”之类的内容并返回模式以便在将来的命令中使用它?
我发现自己反复执行相同的操作,并希望使用expect自动执行它们。我ssh到一个系统上并在其上运行一个生成文件的脚本,然后我将该系统中的文件scp到另外两个系统上。
我可以生成ssh并成功触发文件构建。我不确定如何捕获生成的文件的名称来执行复制。该脚本输出类似“生成foo- 时间戳 .tgz ...完成”的内容。并且 timestamp 在运行之间明显不同,我不想使用glob scp(即scp foo-*tgz
),因为可能存在过时的foo文件(因此是时间戳)。
我是新人,期待并仍然磕磕绊绊的例子等等,偶尔还需要一点点牵手。任何建议/帮助都非常感谢。
答案 0 :(得分:2)
我不知道我们是否可以捕获模式,但在这种情况下我通常做的是将输出存储在变量中然后使用此输出。例如,如果send -- "./executeSomeScript\r"
将提供类似“Generating foo-timestamp.tgz ... Done”的输出,我将用
send -- "output=`./executeSomeScript`\r"
send -- "filename=`echo \$output | awk '{ print \$2 }'\r"
最后
send -- "scp \$filename user@server:path\r"
请注意,必须转义$
,以便不在脚本级别解释它,而是以文字形式发送到远程shell。