在expect脚本中的特定输出之后执行if语句

时间:2015-05-29 17:21:46

标签: linux expect

如果我看到特定的输出,有没有办法执行if语句?例如,当控制台说“拒绝错误的解释器权限”时,我想执行像“dos2unix file_name”这样的命令? 所以逻辑将如下所示,

if (output is "bad interpreter permission denied")
{
  send dos2unix file_name
}
fi

这是一个期望剧本。

编辑:

大家好,我能在预期的剧本中做这样的事吗?

if (grep -cim1 '^M$' lruload.sh) -eq 1; then
send dos2unix filename
fi

2 个答案:

答案 0 :(得分:0)

这个逻辑/伪代码怎么样?

export cmdText=`myCmd param1 param2 2>&1`
if ($cmdText is "bad interpreter permission denied")
{
    send dos2unix file_name
}
fi

权限被拒绝的文本可能转到stderr,而不是stdout,因此重定向2>& 1将它们放在一起,使测试变得简单。

答案 1 :(得分:0)

当你说执行命令时,我希望你的意思是在shell中执行命令。您可以使用exec命令来实现此目的。

我不确定你在哪里互动。我的意思是像telnet或ftp或bash。无论如何,在任何情况下,你都会发送命令并期待提示。

send "command 1"
expect "prompt"
send "command 2"
expect {
    timeout { puts "timeout happened"}

    "bad interpreter per mission denied" {
         set result [exec dos2unix <filename>]
     }
}
# if need to intact with three application, further use 'send' and 'expect'

您有result变量来存储dos2unix输出。