====== 2023-08-22 - interesting bash feature ====== talk is cheap, so i'll show you some code instead: #!/bin/bash set -e false && echo "this never shows up" echo "result: $?" what will it show? ''set -e'' is there so nothing, right? well -- no. it will print this: result: 1 ...and returns exit code ''0''. now the open question is: how on earth?! return from the ''false && whatever'' is clearly non-zero, yet the next line gets executed! stating that previous line ended with an error. let's now compare it with almost identical piece of code: #!/bin/bash set -e ( false && echo "this never shows up" ) echo "result: $?" the output? nothing + return code of ''1''. just as expected! spoiler alert -- it's not a bug. it's a feature. just very non-obvious one. [[https://stackoverflow.com/questions/25794905/why-does-set-e-true-false-true-not-exit|here's a nice explanation]]. TL;DR version is that ''set -e'' exits with an error on non-handled error. eg. this would not fail the script: if [ 1 -eq 2 ] then echo "wtf?!" fi despite ''[ 1 -eq 2 ]'' is clearly false. now if we look at ''foo && bar'' through the same lenses, here ''foo'''s failure is considered "handled", as there's a post-action ''&& bar'', thus ''$?'' is set as expected, but script does not stop. i found this one while inspecting other's person script. it wasn't really clear what's the problem. in the future -- when you write a shell script, do use ''set -e'' but try keeping 1 statement per line. it makes everyone's lifes easier. :) thx [[https://pragmatic-architect.com/|Wojtek]] for helping out with this one! :)