Bash / Expect脚本回显结果错误

时间:2014-07-07 10:26:26

标签: bash echo expect

我正在编写一个bash脚本,通过telnet登录网络设备,使用expect来检索设备状态信息。一切都工作正常,我从设备得到了预期的结果,然而,当试图在一个句子中回应结果时,它会有点混乱。

这是我的bash脚本,其输出显示为:

#!/bin/bash

hostName=$1

INT=$(expect -c '
set timeout 1
set userName admin
set password password

spawn telnet '$hostName'

expect "..."
expect "Connected to"
expect "'^]'."
expect "Username:"
send "$userName"
send "\r"
expect "Password:"
send "$password"
send "\r"
expect "admin@telnet"
expect ">"
send "vsp power"
send "\n"
expect "admin@telnet"
expect ">"
send "exit"
' | grep - | awk '{print $3}')

echo "$INT"  # basic output showing indeed the correct value return from $INT

echo "vspP $INT | vspP=$INT""V"  # the preferred output to allow logging

第一个echo显示基本结果是正确的。第二个回波的输出加扰,如下面的输出结果所示:

# ./vsppower.sh 192.168.0.12
23.67
VvspP=23.67

首选实际输出为:

vspP 23.67 | vspP=23.67V

请提供协助我如何更正此回声输出。

1 个答案:

答案 0 :(得分:0)

我认为你的字符串中有一个Carriage Return或其他奇怪的字符。要尝试找到它,请执行以下操作:

set | grep -i INT | cat -vet

set将显示所有环境变量,grep将找到您想要的特定变量。然后cat -vet会在其中显示任何奇怪的字符,例如<{1}}用于回程。

$ INT结束时有一个回车符。尝试在^M脚本结束后和使用INT

之前添加此行
expect

它使用INT=$(tr -d '\r\n' <<< $INT) # Strip linefeeds and returns tr来删除换行和回车。