使用expect时接收垃圾字符

时间:2015-03-19 14:27:35

标签: linux bash arm expect tty

我在使用Ubuntu PC的脚本中使用expect来连接具有Linux ARM BSP的远程OMAP3板。脚本运行完美。我们现在正在迁移到具有类似但不同的Linux BSP的OMAP4板上。当我调用我的脚本时,我在Ubuntu控制台中收到垃圾字符,当我连接到OMAP3时,我没有收到垃圾字符。

脚本如下所示:

remote_exec()
{
  (
cat <<EOF
    #strace 4
    set timeout -1
    spawn telnet $address
    expect "login:"
    send "$username\r"
    expect "Password:"
    send "$password\r"
EOF
    while [ "$1" ]
    do
        echo 'expect "]# "'
        echo 'send "'$(echo "$1" | sed 's/[$]/\\$/g' | sed 's/["]/\\"/g')'\r"'
        shift
    done
   ) | expect
}

remote_exec \
    "pwd" \
     "echo joie"

这是我连接到OMAP3板时的输出(即没有错误):

test@sts11:~/install/HW400$ ./test-expect.sh 172.19.50.97
spawn telnet 172.19.50.97
Trying 172.19.50.97...
Connected to 172.19.50.97.
Escape character is '^]'.

SBC-97 login: root
Password: 
[root@SBC-97 /root]# pwd
/root
[root@SBC-97 /root]# echo joie
joie
[root@SBC-97 /root]# 

这是连接到我的OMAP4板时的输出(即出现垃圾字符):

test@sts11:~/install/HW400$ ./test-expect.sh 172.19.50.62
spawn telnet 172.19.50.62
Trying 172.19.50.62...
Connected to 172.19.50.62.
Escape character is '^]'.

SBC-62 login: root
[root@SBC-62 /home]# p^[[53;22Rwd
/home
[root@SBC-62 /home]# e^[[53;22Rcho joie
joie
[root@SBC-62 /home]# test@sts11:~/install/HW400$ ;22R;22R;22R

脚本运行正常,但我收到垃圾字符,例如 ^ [[53; 22R ; 22R 。这可能是我的OMAP4板上的tty设置吗?还有什么可能导致这个?感谢。

2 个答案:

答案 0 :(得分:1)

最后,我在这里找到了一个有效的解决方案:

http://www.commandlinefu.com/commands/view/6141/remove-color-codes-special-characters-with-sed#comment

所以我替换了

) | expect

通过

) | expect | sed -r "s:\x1B\[[0-9;]*[mK]::g"'

它按预期工作。

答案 1 :(得分:0)

https://en.wikipedia.org/wiki/ANSI_escape_code有些含糊地说:

  如果要求光标位置,则xterm回复CSI row ; column R,如果用修饰符按下F3键,则回复CSI 1 ; modifiers R,如果行== 1,则会发生碰撞。这可以通过使用?来避免。私有修饰符,将反映在响应中

尝试在spawn之前添加此行:

set env(TERM) vt100