【问题标题】:expect script issues executing awk command and issue puttng expect_out in variable.期望脚本问题执行 awk 命令并在变量中发出 puttng expect_out。
【发布时间】:2017-07-07 11:14:24
【问题描述】:

在我的脚本的 spawn ssh 中执行 awk 命令似乎存在问题。另外,我无法将输出输出到变量。

set file [open "hosts.test"]
set hosts [split [read -nonewline $file] "\n"]
close $file

foreach host $hosts {
        puts $host
        spawn ssh -q -o StrictHostKeyChecking=no  [lindex $argv 0]@$host
        expect "Password: "
        send "[lindex $argv 1]\r"
        expect -re "(>|#) "
        send "sudo su -\r"
        expect "Enter YOUR password: "
        send "[lindex $argv 1]\r"
        expect -re "(>|#) "
        send "cat /etc/SuSE-release | awk -F= '/=/ {print \$2}' | sed -e 's/ * //g' | tr '\012' '.' | sed -e 's/\.$//'"
        set version $expect_out(buffer)
        expect -re "(>|#) "
        puts "$version"
        send "exit\r"
        expect -re "(>|#) "
        send "logout\r"
}

错误:

 # "
send: sending "cat /etc/SuSE-release | awk -F= '/=/ {print $2}' | sed -e 's/ * //g' | tr '\n' '.' | sed -e 's/.$//'" to { exp4 }
Gate keeper glob pattern for '(>|#) ' is ''. Not usable, disabling the performance booster.

expect: does "\u001b(B\u001b[m" (spawn_id exp4) match regular     expression "(>|#) "? (No Gate, RE only) gate=yes re=no
cat /
expect: does "\u001b(B\u001b[mcat /" (spawn_id exp4) match regular   expression "(>|#) "? (No Gate, RE only) gate=yes re=no
etc/Su
expect: does "\u001b(B\u001b[mcat /etc/Su" (spawn_id exp4) match regular expression "(>|#) "? (No Gate, RE only) gate=yes re=no
SuSE-release | awk -F= '/=/ {print $2}' | sed -e 's/ * //g' | tr '

''。' | sed -e 's/.$//' 期望:"\u001b(B\u001b[mcat /etc/SuSE-release | awk -F= '/=/ {print $2}' | sed -e 's/ * //g' | tr '\r\ n> ' '.' | sed -e 's/.$//'" (spawn_id exp4) 匹配正则表达式 "(>|#) "? (No Gate, RE only) gate=yes re=yes 期望:设置期望输出(0,字符串)>“ 期望:设置期望输出(1,字符串)>“ 期望:设置期望输出(spawn_id)“exp4” 期望:设置期望输出(缓冲区)“\u001b(B\u001b[mcat /etc/SuSE-release | awk -F= '/=/ {print $2}' | sed -e 's/ * //g' | tr '\r\n> " 发送:发送“exit\r”到 { exp4 } '(>|#)' 的看门人 glob 模式是 ''。不可用,禁用性能增强器。

expect: does "' '.' | sed -e 's/.$//'" (spawn_id exp4) match regular expression "(>|#) "? (No Gate, RE only) gate=yes re=no
 exit

【问题讨论】:

    标签: variables awk expect


    【解决方案1】:

    我不是expect 专家,但您可以通过这样做大大简化解析:

    awk '/VERSION/ {a=$3} /PATCHLEVEL/ {a=a"."$3} END{print a}' /etc/SuSE-release
    

    或者如果你喜欢更简洁但不那么明显的东西:

    awk '/=/ {a=a?a"."$3:$3} END{print a}' /etc/SuSE-release
    

    你可能不得不逃避一些事情,也许是这样?

    send "awk '/VERSION/ {a=\$3} /PATCHLEVEL/ {a=a\".\"\$3} END{print a}' /etc/SuSE-release"
    

    此外,您可以直接在ssh 命令行中向远程主机发送命令,这可能是另一种探索途径。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-10-01
      • 2019-05-14
      • 1970-01-01
      • 2014-08-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多