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

Re: signal handling via ssh

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"


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