【问题标题】:Expect - Interrupt program - Ctrl+CExpect - 中断程序 - Ctrl+C
【发布时间】:2016-06-13 15:54:52
【问题描述】:

我正在运行以下脚本以在远程服务器上开始捕获并随后下载文件。目前我必须用 Ctrl+C 暂停它并手动退出。

如何替换交互并定义触发器以终止 tcpdump 或捕获 Ctrl+C 并将其传递到远程服务器内部?

spawn ssh "$user_ssh\@$ssh_server"

expect {
        "*password"     { send "$pass\n";   exp_continue}
        "root\@*"       { }
        timeout  { puts "time out expecting password or bash"; exit 1 }
    }

send "sudo tcpdump -i $intf -s0 -w $file -v\n";
interact

spawn scp "$user_ssh\@$ssh_server:$file" .

expect "password:"
send "$pass_ssh\n";
expect "100\%"

【问题讨论】:

    标签: linux ssh scripting tcl expect


    【解决方案1】:

    发送 Ctrl+C,请执行以下操作:

    send \x03
    

    处理传入的 Ctrl+C,请执行以下操作:

    trap {your handler script here} SIGINT
    

    可能想让处理程序脚本(可以是多行的东西)将信号发送到内部进程......

    trap {
        send \x03
        send_user "You pressed Ctrl+C\n"
    } SIGINT
    

    但要小心!当用户在文本模式程序中按下 Ctrl+C 时(在大多数 GUI 中,这是一个复制操作),他们通常期望它很快就会消失,所以你应该注意确保您在信号到达后不会花费太长时间清理所有东西。

    【讨论】:

    • 是否可以将此陷阱条件仅应用于特定部分?例如......在示例中,这仅在“发送”sudo tcpdump -i $intf -s0 -w $file -v\n“;”中有用行。
    猜你喜欢
    • 1970-01-01
    • 2022-01-12
    • 2021-05-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-01-14
    相关资源
    最近更新 更多