基于this answer,我试图想办法退出telnet并返回0
这些不会起作用:
(echo -e "repl.quit()";sleep 1) |telnet localhost 4242;echo $?
(echo -e "\029";sleep 1;echo "q";sleep 1) |telnet localhost 4242;echo $?
(echo -e "\c]";sleep 1;echo "q";sleep 1) |telnet localhost 4242;echo $?
(echo -e "\e]";sleep 1;echo "q";sleep 1) |telnet localhost 4242;echo $?
(echo -e "\E]";sleep 1;echo "q";sleep 1) |telnet localhost 4242;echo $?
问题是:我无法区分成功退出和失败退出......
我认为this question可以链接。
答案 0 :(得分:2)
在执行通过管道提供的所有命令后,在telnet客户端终止连接之前,需要发送^]
字符,这是一个不可打印的组分隔符。大多数echo
程序版本都可以使用-e
选项生成不可打印的字符。组分隔符是八进制的035(您可以在* nix系统上看到整个ASCII表man 7 ascii
。)。因此,整个命令应该如下所示:
$ (echo "content.location.href = 'http://v4.ident.me/'"; sleep 2; echo -e '\035'; sleep 2) | telnet localhost 4242 > /dev/null
$ echo $?
$ 0