How to logically negate the return value of a command?
Colin Watson
cjwatson at ubuntu.com
Wed Sep 24 16:00:38 UTC 2014
On Wed, Sep 24, 2014 at 04:52:38PM +0100, Colin Watson wrote:
> On Mon, Sep 22, 2014 at 07:04:57PM +0100, Chris Green wrote:
> > I want to use ping to detect if a machine is available locally on a
> > LAN as a test for a 'match exec' in ~/.ssh/config.
> >
> > The trouble is that I need to logically negate the return value, i.e.
> > I want to have something like:-
> >
> > match exec "not ping -c 1 hostname"
> >
> > However this doesn't work of course. Is there any easy way (i.e. an
> > executable command) which will logically not the value that ping
> > returns? I know I could write a little script that does the job but
> > if can do it without I'd be happier.
>
> Match exec "! ping -c 1 hostname"
My bad, I should have tested; you are of course quite right that ssh
prepends "exec" to the given command:
/*
* Use "exec" to avoid "sh -c" processes on some platforms
* (e.g. Solaris)
*/
xasprintf(&command_string, "exec %s", cmd);
How about, then:
Match exec "sh -c '! ping -c 1 hostname'"
A little cumbersome, but it works, and you can put more complicated
things inside the double quotes. The downside is that you can't use
escaped double quotes in there as far as I know, so if it gets too
complicated then the quoting will get rather fearsome, and you will
probably eventually have to crack and write an auxiliary script.
--
Colin Watson [cjwatson at ubuntu.com]
More information about the ubuntu-users
mailing list