我试图停止在远程终端上运行tcpdump命令。如果我telnet到终端,启动tcpdump,然后发送一个^ c,tcpdump停止没有问题。但是,如果我telnet到同一个终端,启动tcpdump,然后退出telnet会话,当我重新连接到同一个telnet会话时,我无法通过^ c停止tcpdump。当我这样做而不是停止tcpdump时,似乎它只是退出telnet会话并且tcpdump继续在远程终端上运行。我在下面提供了我的脚本。任何帮助是极大的赞赏。如何使用期望从一个新的telnet会话远程停止tcpdump
#!/usr/local/bin/expect -f
exp_internal 1
set timeout 30
spawn /bin/bash
expect "] "
send "telnet 192.168.62.133 10006\r"
expect "Escape character is '^]'."
send "\r"
expect "# "
set now [clock format [clock seconds] -format {%d_%b_%Y_%H%M%S}]
set command "tcpdump -vv -i trf400 ip proto 89 -s 65535 -w /tmp/test_term420_${now}.pcp "
send "$command\r"
expect "tcpdump: listening on"
# This works correctly. tcpdump quits and I am returned to the expected prompt
send "\x03"
expect "# "
send "$command\r"
expect "tcpdump: listening on"
# Exit telnet session
send -- "\x1d"
expect "telnet> "
send -- "q\r"
expect "] "
# Reconnect to telnet session
send "telnet 192.168.62.133 10006\r"
expect "Escape character is '^]'."
send "\r"
# This does not work as intended. The ^c quits the telnet session instead of stopping tcpdump
send "\x03"
expect "] "
send "ls\r"
expect "] "
嗨Donal,谢谢你的帮助,但你的解决方案没有奏效。我编辑了我的问题,使其更清楚。当在同一个telnet会话中启动tcpdump时,发送^ c确实有效。但是,当我连接到已经运行tcpdump的远程telnet会话时,它仍然不起作用。而不是像预期的那样停止tcpdump,似乎发送^ c退出telnet会话并将我返回到本地计算机。这使我更加困惑。如果你能提供任何更好的见解。 –