On Wed, 2014-10-08 at 16:46 -0600, Amir Caspi wrote: > On Oct 8, 2014, at 4:23 PM, Duane Hill <duih...@gmail.com> wrote: > > > > No. && is a way of chaining commands together. Your cron says run > > sa-update and then restart spamd. In other words, when sa-update > > finishes running, regardless if there was an update applied or not, > > restart spamd. > > Unless I am mistaken, I believe this is not correct. On *nix systems, > && is the logical "and" operator, and it can be used to chain commands > as dependencies. > Correct.
> && short-circuits on failure, so if the first command returns zero, > the "and" would fail and the second command never runs. The second > command is only evaluated if the first returns non-zero ("true"). > Incorrect. sh and its descendants such as bash and ksh reverse the representation of true and false with respect to C and its descendants: in shell scripts a value of zero is TRUE and non-zero is FALSE. This is a necessary feature since, by convention, under UNIX/Linux or any other POSIX-compliant OS a program returns zero on success and a non-zero value on failure. The non zero exit code *may* be a value showing what the error was but this isn't guaranteed: all you can say is that a non-zero exit code indicates that the program didn't complete its usual activity. > Hence, spamd is restarted only if sa-update actually loads an update, > and not otherwise. > Correct: "a && b" in a shell script means run b iff a was successful > This is the same reason why you can also see commands like: > do_this || die > in perl scripts, because the logical "or" operator || will > short-circuit on success, hence the "fallback" command never gets run > if the first one succeeded. > True, but be aware that Perl, like C, C++, Java,.... represents false by zero and true by non-zero values - the reverse of a Unix/Linux/POSIX shell script. In all cases there's no danger of confusion as long as you write logical statements that are either boolean algebra that makes no attempt to represent the value of a logical variable or only represents it by the literals TRUE and FALSE. Martin Martin