作为更大计划的一部分(跳过一串跳,然后在禁用PortForwarding的设置中创建到mongodb的端口隧道),我尝试创建一个tcl/expect脚本来验证是否可以中继tcl/expect准备的流。
这是我的实验:
# terminal 1 [listen to 2000]
nc -l 2000
# terminal 2 [listen to 200 then connect it to 2000 using expect]
socat tcp-l:200 system:'./nc-test.exp'
# terminal 3 [connect to 200]
nc localhost 200以及我的tcl/expect简单脚本(nc-test.exp):
#!/usr/local/bin/expect
log_user 0
spawn nc localhost 2000
stty raw -echo
interact -o -nobuffer现在的问题是,我用terminal 3编写的所有东西都会回显给我自己。奇怪的是,当我将socat直接连接到nc localhost 2000或直接执行tcl/expect脚本时,这种情况不会发生。你能帮我想想吗
发布于 2020-12-22 09:35:38
stty脚本中的expect命令是在/dev/tty上运行的,这可能是终端2中的tty。然而,spawn创建了另一个pty来与它启动的命令进行对话。该tty将从当前的tty继承,即终端2,因此将具有回显。只需将stty raw -echo行移到产卵之前就足够了,或者更明确地说,您可以通过命令设置stty设置,如
set stty_init "raw -echo"在spawn之前。
https://stackoverflow.com/questions/65385584
复制相似问题