环境
- sys:
CentOS-7.9
- curl:
curl 7.29.0
telnet命令
$ ( echo 'status'; sleep 1; echo 'exit'; sleep 1 ) | telnet 127.0.0.1 20880
Trying 127.0.0.1...
Connected to 127.0.0.1.
Escape character is '^]'.
OK
dubbo>Connection closed by foreign host.
- 缺点:即使使用exit命令退出,最后的退出状态仍然不为0。
curl命令
$ bash -c "( echo 'status'; sleep 1; echo 'exit'; ) | curl telnet://127.0.0.1:20880"
OK
dubbo>
这种退出码是正常的。
python telnetlib
$ ( echo 'status'; sleep 1; echo 'exit'; ) | python -m telnetlib -d 127.0.0.1 20880
Telnet(127.0.0.1,20880): send 'status\n'
Telnet(127.0.0.1,20880): recv 'OK\r\ndubbo>'
OK
dubbo>Telnet(127.0.0.1,20880): send 'exit\n'
telnetlib
也是可以的, 退出码也正常。
这其中,最主要是sleep
命令的作用,如果没有sleep
命令,是看不到命令的结果的。
这里只是简单的探测,如果遇到复杂的情况时,编写一个脚本会更好。
expect
在应对复杂场景时,这种才是更好的选择。
参考
- https://stackoverflow.com/questions/7013137/automating-telnet-session-using-bash-scripts : Automating telnet session using bash scripts