在SIGPIPE上终止ssh远程命令执行

ssh remotehost "remote_command" | more 

这将在remote_command上执行remote_command ,并对remote_command的输出进行分页。 如果用户不愿滚动浏览所有的页面,他可以在--MORE--提示符下按q 。 不幸的是,这并不能阻止ssh进程(和远程命令)。 用户必须按^C来实际终止进程。 当用户按q终止更多的ssh获取SIGPIPE,但继续作为remote_command没有完成执行。 当用户退出寻呼机时,有什么办法可以终止ssh和远程执行吗? 我不希望用户按^ C,因为如果本地文件被捕获(实际上他不知道这个命令是通过SSH隧道远程执行的),他不会被要求这样做。

为什么不只是改变命令在远程服务器上调用更多? 你也必须强迫一个pty,像wfaulk提到的那样。 假设这是另一个unix系统,这应该没问题。 即

ssh -t name @ system“命令|更多”

仅供参考。 less即是多 :)

我没有testing过这个,但是尝试通过将' -t '标志传递给ssh从远程机器获得一个pty。