O problema é que ||
liga mais que ;
, então sua primeira linha consiste em dois comandos: o primeiro é um comando composto: ls || ls || echo
e o segundo é apenas exit 3
. Como mencionado em um comentário do meuh, você deve escrever
ls a || ls > /dev/null || { echo "both command fails"; exit 3; }
echo 5 # not showed up