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

Linux 在expect脚本中的特定输出之后执行if语句,linux,expect,Linux,Expect,如果我看到一个特定的输出,有没有办法执行if语句?例如,当控制台说“错误的解释器权限被拒绝”时,我想执行一个命令,如“dos2unix file\u name” 因此,逻辑如下: if (output is "bad interpreter permission denied") { send dos2unix file_name } fi 这是一个expect脚本 编辑: 我可以在expect脚本中执行类似的操作吗 if (grep -cim1 '^M$' lrulo

如果我看到一个特定的输出,有没有办法执行if语句?例如,当控制台说“错误的解释器权限被拒绝”时,我想执行一个命令,如“dos2unix file\u name”

因此,逻辑如下:

if (output is "bad interpreter permission denied")
{
  send dos2unix file_name
}
fi
这是一个expect脚本

编辑:

我可以在expect脚本中执行类似的操作吗

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

这个逻辑/psuedo代码怎么样

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

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

当您说执行命令时,我希望您的意思是在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'
发送“命令1”
期待“提示”
发送“命令2”
期待{
超时{puts“超时发生”}
“每个任务的翻译错误被拒绝”{
设置结果[exec dos2unix]
}
}
#如果需要使用三个应用程序,请进一步使用“发送”和“预期”

您有
result
变量来存储
dos2unix
输出

这应该是bash还是expect?(另外,还有更好的方法来检测是否需要运行
dos2unix
;为什么不直接测试呢?),这是一个预期的脚本。您是否将文件发送到某个服务器并运行它的过程自动化?这仍然很像一种情况,在这种情况下,遵循最佳实践可以从一开始就防止出现问题;然而,没有足够的上下文来更清楚地说明这一点。无论如何——如果您想要本机的
expect
答案,您可能还应该添加
tcl
标志,因为expect脚本是用tcl本机编写的。