期待脚本,在命令中放置文件名

时间:2014-03-10 11:00:00

标签: expect

我对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

1 个答案:

答案 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,以获得有关脚本匹配(或不匹配)的良好,可靠的调试信息。在测试时它会非常有用。

让我知道这是怎么回事。