gpt4 book ai didi

linux - Bash 和 Expect : Is there a way to ignore or remove ANSI control sequences from Expect buffer?

转载 作者:太空狗 更新时间:2023-10-29 11:19:20 26 4
gpt4 key购买 nike

我正在使用 Expect 通过(虚拟)串行端口连接到我的服务器。 (具体来说是 HP iLo)

从 Linux 操作系统 ISO 镜像启动时,您最终会看到“boot:”提示符。当我的服务器出现该提示时,我想输入我自己的自定义启动选项并按回车键。很简单,对吧?

这是当您观看我的 Expect 脚本执行时启动提示符的样子(看起来很正常):

boot:

但是,我无法匹配“boot:”。查看我的日志文件中的 Expect 缓冲区,这是为该行捕获的内容:

ESC\[25;01HbbESC\[25;01HESC\[25;02HooESC\[25;02HESC\[25;03HooESC\[25;03HESC\[25;04HttESC\[25;04HESC\[25;05H::ESC\[25;05HESC\[25;06H  ESC\[25;06HESC\[25;07H"

我认为所有这些控制序列都在搞砸我的比赛。如果您仔细观察,“boot:”实际上就在那里,但它被我认为是 ANSI 控制序列的东西包围着。

事实上,日志文件绝对充满了 ANSI 控制字符。

我一直在研究的 Expect 脚本的相关部分:

bash #] expect -d -c '
.....
# SSH to the Virtual Serial Port Management server
spawn ssh user@1.2.3.4
.....
# Access the Virtual Serial Port for the server being booted
send "vsp\r"
.....
# After rebooting the server, when the boot: prompt appears, enter boot options
expect {
"boot:" {send $bootOptions \r\n"}
timeout {send_user "Never found boot prompt\n"; send_user "$expect_out(buffer)"; exit 1}
}
.....
exit'

关于处理这些控制字符的最佳方式有什么想法吗?我试过在运行脚本的机器上导出 TERM=dumb 和 TERM=vt1000。没有太大区别。

最佳答案

不确定这是否有帮助,但您可以为 ssh 和 exec 创建一个包装器,而不是 ssh 然后有

ssh <host> | perl -pe 's/\e([^\[\]]|\[.*?[a-zA-Z]|\].*?\a)//g' | col -b

如果不需要的话,也许可以去掉过滤换行符的 col -b。

关于linux - Bash 和 Expect : Is there a way to ignore or remove ANSI control sequences from Expect buffer?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21790566/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com