Zsh Mailing List Archive
Messages sorted by: Reverse Date, Date, Thread, Author

Re: signal handling via ssh

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!


Messages sorted by: Reverse Date, Date, Thread, Author