On Mon, 2018-11-05 at 15:00 +0100, Dario Lesca wrote:
When I concatenate 2 or more shell command with pipe (|), I get only the status of last one.

For example: "some-cmd | logger -t "some-cmd messages:"; echo $?"

If "some-cmd" fail with status !=0 I get always status of last one, in this case 0

In my case if the first command fail, I must send a warning message

A more simple example is: "false | true"

I want get status 1, of first command (false), not 0 (true)

I have also try "sh -e -c 'false || exit 2|true'; echo $?" but I get always 0

How to I get first status and break the chains of pipes ?

Assuming that your shell is bash:
set -o pipefail