Shell 如何触发ssh的结束?
我使用代理服务器,每次都更改网络设置。Shell 如何触发ssh的结束?,shell,ssh,Shell,Ssh,我使用代理服务器,每次都更改网络设置。 所以我想要像这样的shell脚本 使用_proxy(){ #变更网络 ssh代理-N #恢复更改 } 我试过像这样的trap命令 $ trap "echo 'detected!'" 2 $ ssh proxy -N 但是当我通过Ctrl+C完成ssh时,不会打印“detected!”。 有什么问题吗?当一个进程被中断时(例如从ctrl-c),该进程会收到SIGINT。如果您想知道子进程何时更改,请改为trapSIGCHLD: $ trap "echo
所以我想要像这样的shell脚本
使用_proxy(){
#变更网络
ssh代理-N
#恢复更改
}
我试过像这样的trap
命令
$ trap "echo 'detected!'" 2
$ ssh proxy -N
但是当我通过Ctrl+C完成ssh时,不会打印“detected!”。有什么问题吗?当一个进程被中断时(例如从ctrl-c),该进程会收到
SIGINT
。如果您想知道子进程何时更改,请改为trapSIGCHLD
:
$ trap "echo int" SIGINT
$ trap "echo child" SIGCHLD
$ /bin/cat
ctrl+c
child
谢谢你的回答。我可以在bash中完成,但在zsh中不行。所以我通常使用zsh和defined-TRAPCHLD,但它不起作用。你有什么想法吗?@Kurarr我不使用zsh抱歉。在bash的案例中,thsutton的回答解决了这个问题。我用的是zsh,定义TRAPCHLD对我来说不起作用。我能解决它吗?