true
e false
são coreutils (também normalmente internos do shell) que retornam 0 e não-0, para situações em que você precisa desse comportamento. Das man pages:
true - do nothing, successfully
false - do nothing, unsuccessfully
Então, você está direcionando a saída de stop service foo
para true
, que a ignora e retorna 0. Tecnicamente funciona, mas você provavelmente deve usar || true
, então é óbvio qual foi sua intenção; não há realmente nenhuma razão para canalizar a saída para um programa que não a está usando