我对expect脚本有疑问。好吧,当我grep这个文件时,我需要把它放在下面,它应该看起来像:
/opt/ericsson/arne/bin/import.sh -f bla_bla_bla.xml -val:rall
但我不知道如何将此文件放在此行之间。因为当我把bep之间的grep命令放在没有用的时候,也许问题是-val:rall我之后有没有? 如果有人知道我怎么能把文件名放在File1
中#!/usr/local/bin/expect --
set env(TERM) vt100
set env(SHELL) /bin/sh
set env(HOME) /usr/local/bin
set PASSWORD ter
set DUL [lindex $argv 0]
set VAR _cus_ipsec
match_max 1000
spawn ssh mashost
expect {
"assword" {send "$PASSWORD\r"}
}
expect "ran@rn23"
send -- "cd /tih/opt/bla/tih/ \r"
expect "ran@rn23"
send -- "grep -il $DUL * \r*"
expect "ran@rn23"
send -- "/opt/bl/arne/bin/imp.sh -f File1 -val:rall\r"
expect "ran@rn03"
send -- "/opt/bl/arne/b/imp.sh -f File1 -import\r"
expect "ran@rn23"
interact
答案 0 :(得分:1)
好的,谢谢你的澄清,我相信我明白你现在要做的是什么。
您需要做的是更改将grep命令发送到捕获文件名的命令之后的expect语句。并且你可能会受益于使用expect命令的正则表达式模式(-re),并且可能使用括号来捕获文件名(在下面的示例中没有使用)。我不知道你可以从你的grep获得哪些可能的文件名,所以你可能需要调整以下相当多,但假设你的grep会给你一个.xml文件开头使用“NAME”,您可以执行以下操作:
send -- "grep -il $DUL * \r*"
expect -re "NAME.*\.xml"
send -- "/opt/bl/arne/bin/imp.sh -f $expect_out(0,string) -val:rall\r"
作为建议,您应该为expect语句添加一些超时选项,并进行一些错误检查,否则如果没有按预期方式执行任何操作,此脚本将不会停止。例如。只有你找到了你想要的东西才发送,等等。
你的正则表达可能会比我给你看的更复杂,但你可以得到这个想法。此外,在脚本顶部附近的某处包含exp_internal 1
,以获得有关脚本匹配(或不匹配)的良好,可靠的调试信息。在测试时它会非常有用。
让我知道这是怎么回事。