Skip site navigation (1)Skip section navigation (2)
Date:      Wed, 8 Nov 2017 13:23:14 +0000
From:      Arthur Chance <freebsd@qeng-ho.org>
To:        Polytropon <freebsd@edvax.de>
Cc:        freeBSD Mailing List <freebsd-questions@freebsd.org>
Subject:   Re: how to code a timer loop in a sh script
Message-ID:  <95cc2469-955e-02c1-3cdd-82e630feaa1c@qeng-ho.org>
In-Reply-To: <20171108135659.dab81adf.freebsd@edvax.de>
References:  <5A00A826.2000501@gmail.com> <CADqw_g%2BouzDLBdPosKiPSmRZuP6Am%2Bc7OGUZPGWX249D97DUhQ@mail.gmail.com> <alpine.BSF.2.21.1711080824130.1036@mail.fig.ol.no> <20171108135659.dab81adf.freebsd@edvax.de>

next in thread | previous in thread | raw e-mail | index | archive | help
On 08/11/2017 12:56, Polytropon wrote:
> On Wed, 8 Nov 2017 08:25:55 +0100 (CET), Trond Endrestøl wrote:
>> On Mon, 6 Nov 2017 19:24+0100, Michael Schuster wrote:
>>
>>> while [ 1 ]; do
>>>     do_stuff
>>>     sleep 600
>>> done
>>
>> This should be even better:
>>
>> while true; do
>>     do_stuff
>>     sleep 600
>> done
> 
> Yes.
> 
> While /usr/bin/true always evaluates to true (as desired),
> "test 1" depends on if it's an internal or external command
> which depends on the shell, and if the implementation conforms
> to the standard. In this specific case, 1 would be seen as "1",
> a non-empty string, and therefore should cause test to return 0,
> as a non-empty string evaluates to true.
> 
> From "man test":
> 
>      string        True if string is not the null string.
> 
> As the 1 is the only expression tested, this rule applies.
> No math included. ;-)

A minor point: in /bin/sh "true" and "test" are builtins (with synonyms
":" and "[" respectively). true (and :) don't need to test anything, so
shave microseconds off the 10 minute sleep cycle. :-)

-- 
An amusing coincidence: log2(58) = 5.858 (to 0.0003% accuracy).



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?95cc2469-955e-02c1-3cdd-82e630feaa1c>