使用 expect 时收到垃圾字符
Receiving junk charaters while using expect
我在 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 [ "" ]
do
echo 'expect "]# "'
echo 'send "'$(echo "" | 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 设置吗?还有什么可能导致这种情况?谢谢
https://en.wikipedia.org/wiki/ANSI_escape_code 有点含糊地说:
xterm replies CSI row ; column R
if asked for cursor position and CSI 1 ; modifiers R
if the F3 key is pressed with modifiers, which collide in the case of row == 1. This can be avoided by using the ? private modifier, which will be reflected in the response
尝试在 spawn
之前添加此行:
set env(TERM) vt100
最后,我在这里找到了一个可行的解决方案:
所以我替换了行
) | expect
来自
) | expect | sed -r "s:\x1B\[[0-9;]*[mK]::g"'
它按预期工作。
我在 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 [ "" ]
do
echo 'expect "]# "'
echo 'send "'$(echo "" | 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 设置吗?还有什么可能导致这种情况?谢谢
https://en.wikipedia.org/wiki/ANSI_escape_code 有点含糊地说:
xterm replies
CSI row ; column R
if asked for cursor position andCSI 1 ; modifiers R
if the F3 key is pressed with modifiers, which collide in the case of row == 1. This can be avoided by using the ? private modifier, which will be reflected in the response
尝试在 spawn
之前添加此行:
set env(TERM) vt100
最后,我在这里找到了一个可行的解决方案:
所以我替换了行
) | expect
来自
) | expect | sed -r "s:\x1B\[[0-9;]*[mK]::g"'
它按预期工作。