tcl - Expect Script - 如何验证文件的第一行和最后一行

标签 tcl expect

我正在使用 Expect 在远程系统上创建 CSR 文件。我正在捕获系统的输出并将其放入本地 PC 上的文件中(需要的地方)。

我需要验证该文件的第一行和最后一行,以确保该文件如下所示:

-----BEGIN CERTIFICATE REQUEST-----
.
.
.
-----END CERTIFICATE REQUEST-----  

最初我只是通过循环查找文件的行来查找最后一行(或者我是这么认为的)-----END CERTIFICATE REQUEST-----

set fp [ open $csrname ]
while {[gets $fp line] != -1} {
    if { $line == "-----END CERTIFICATE REQUEST-----" } {
        puts "The Certificate Signing Request file \"$csrname\" has been succesfully created"
    } else {
        puts "The certificate file is invalid."
        puts $line
        exit 41
    }
}

我的逻辑有缺陷,因为我最终陷入了 if 的错误腿中。声明并退出。

如何仅验证文件的第一行和最后一行?

最佳答案

企业社会责任实际上并没有那么长;最多只有几千字节。我们可以一次性验证批处理!

# Load *everything* from a file at once
set f [open $csrname]
set contents [read $f]
close $f

# Validate it using this regular expression:
set RE {^-----BEGIN CERTIFICATE REQUEST-----\n.*\n-----END CERTIFICATE REQUEST-----\n*$}
if {![regexp $RE $contents]} {
    puts "The certificate file is invalid."
    exit 1
    # This spot is unreachable, of course...
}

puts "The Certificate Signing Request file \"$csrname\" has been succesfully created"

我建议检查分隔符之间的位是否也仅使用有效字符(它是 base64 编码的 PKCS#10),但一旦超出基础知识,情况就会变得更加复杂。也许最好只是确认您没有被截断或根本不是 CSR 的东西。

关于tcl - Expect Script - 如何验证文件的第一行和最后一行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37736871/

相关文章:

tcl - NS2 NAM 不显示传输

debugging - Tcl 程序,其行为根据 "puts"语句而变化

tcl - 删除 Tcl 命令中的文件路径和扩展名

while-loop - 期望在 while 循环内 - 永远循环

expect - 如何在 "expect script"内启动 shell 脚本?

expect 命令在 bash 脚本中不起作用

TCL:连接变量中的输出位

python - 提高 Tkinter 文本的 Pygments 语法突出显示速度

bash - Expect 条件似乎不起作用

ssh - 使用expect通过ssh连接到交换机