From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 2313 invoked by alias); 4 Apr 2011 09:26:10 -0000 Mailing-List: contact zsh-users-help@zsh.org; run by ezmlm Precedence: bulk X-No-Archive: yes List-Id: Zsh Users List List-Post: List-Help: X-Seq: 15918 Received: (qmail 3278 invoked from network); 4 Apr 2011 09:25:58 -0000 X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on f.primenet.com.au X-Spam-Level: X-Spam-Status: No, score=-1.9 required=5.0 tests=BAYES_00 autolearn=ham version=3.3.1 Received-SPF: none (ns1.primenet.com.au: domain at biskalar.de does not designate permitted sender hosts) Content-Type: text/plain; charset=us-ascii Mime-Version: 1.0 (Apple Message framework v1084) Subject: Re: signal handling via ssh From: Sebastian Stark In-Reply-To: <110401071434.ZM3403@torch.brasslantern.com> Date: Mon, 4 Apr 2011 11:25:43 +0200 Content-Transfer-Encoding: 7bit Message-Id: <634925AD-3E67-474B-B0FD-480189897687@biskalar.de> References: <19DA6B3D-8C10-4743-BA15-39EDAE324342@biskalar.de> <110401071434.ZM3403@torch.brasslantern.com> To: zsh-users X-Mailer: Apple Mail (2.1084) Am 01.04.2011 um 16:14 schrieb Bart Schaefer: > On Apr 1, 11:27am, Sebastian Stark wrote: > } > } ssh -t $server "less +F /var/log/syslog; exec \$SHELL -l" > } > } and press '^C' I'm logged off from $server. The '^C' does not seem to > } go through to only the less process. > } > } How can I achieve something like the above but such that ^C does not > } end the ssh connection? > > The ^C is a tty-driver interrupt, which means it's sent to the "process > group leader" which controls the pseudo-tty allocated by ssh -t. In > this example the group leader is the entire shell process that has been > invoked to run those two commands in sequence. > > So what you need to do is stop the group leader from reacting to the > signal while allowing "less" to do so. You can do the first with the > trap command, but that ignores the signal in all sub-processes as well, > so you have to restore the signal handling in a new process created > explicitly for that purpose. It all comes out like this: > > ssh -t $server "trap '' INT; \ > (trap - INT && exec less +F /var/log/syslog); \ > exec \$SHELL -l" Works for me, thank you very much for both, code and explanation! Sebastian