- Apr 2021
-
trailblazer.to trailblazer.to
-
A falsey return value from #validate will deviate the flow and go straight to End.fail_fast.
Similar to: How, in Rails, aborting a before_action causes all later ones to be skipped.
-
- Nov 2020
-
wresch.github.io wresch.github.io
-
Important caveat: in the combined expression, if the middle command has a non-zero exit status, then both the middle and the rightmost command end up getting executed.
I don't think that is surprising, is it? Since && and || have the same order of precedence. So I think this is more of a clarification than a caveat.
I think this is just because:
a && b || c is equivalent to: (a && b) || c (so of course c gets evaluated if
(a && b)
is false (that if eithera
orb
is false).I think they just mean, in this case:
bedmap && mv || fail
if
mv
fails, thenfail
still gets executed.Easier to see with a simpler example:
⟫ true && false || echo 'fail' fail ⟫ false && true || echo 'fail' fail
Better example/explanation here: https://hyp.is/-foxmCVXEeuhnLM-le_R4w/mywiki.wooledge.org/BashPitfalls
The caveat/mistake here is if you treat it / think that it is equivalent to if a then b else c. That is not the case if b has any chance of failing.
-
-
-
The potential problem: if second_task fails, third_task will not run, and execution will continue to the next line of code - next_task, in this example. This may be exactly the behavior you want. Alternatively, you may be intending that if second_task fails, the script should immediately exit with its error code. In this case, the best choice is to use a block - i.e., curly braces: first_task && { second_task third_task } next_task Because we are using the -e option, if second_task fails, the script immediately exits.
-
When people write COND && COMMAND, typically they mean "if COND succeeds (or is boolean true), then execute COMMAND. Regardless, proceed to the next line of the script." It's a very convenient shorthand for a full "if/then/fi" clause.
-
- May 2020
-
en.wikipedia.org en.wikipedia.org
-
For instance, cor does not distribute over cand: compare (A cand B) cor C with (A cor C) cand (B cor C); in the case ¬A ∧ C , the second expression requires B to be defined, the first one does not
-
-