Por que você não testa com alguns comandos fictícios que você sabe que funcionarão ou falharão?
$ ls foo && echo ok1 ; echo ok2
ls: cannot access foo: No such file or directory
ok2
$ ls foo && (echo ok1 ; echo ok2)
ls: cannot access foo: No such file or directory
Parece que a sua intuição estava correta e você precisa da segunda estrutura.
Como sugerido por mikeserv , para testes em geral, você pode usar true
(ou :
) e false
, em vez de ls
de um arquivo inexistente. Portanto,
$ false && echo ok1 ; echo ok2
ok2
$ false && (echo ok1 ; echo ok2)