【发布时间】: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
【问题讨论】: