On Thu, Feb 2, 2023, at 14:45, Petter Reinholdtsen wrote: > [Scott Colby] > > I believe this is caused by the final command of the script being > > `zpool list ... | while read -r pool do ...; done`. When the output > > of `zpool list` is exhausted, `read` returns an error, and thus the > > script exits with that status. I have confirmed this by running the > > script with `sh -x` and seeing that the last output line is > > `+ read -r pool`. > > This sound strange. It is not according to my understanding of bourne > shell scripting, and this oneliner describe how I believe it work: > > % ((set -x; echo foo|while read a; do a=$a; done); echo $?) > + echo foo > + read a > + a=foo > + read a > 0 > % You are correct. I was continuing to investigate this and I think the actual case is that the previous call returns 1:
+ lsblk -dnr -o TRAN /dev/sda + [ sata = nvme ] # <-- this is false + return + read -r pool As can be demonstrated by: $ cat test.sh #!/usr/bin/env sh printf '1\n2\n3\n' | \ while read -r h do echo "aa$h" false done $ sh -x test.sh + + printf 1\n2\n3\n read -r h + echo aa1 aa1 + false + read -r h + echo aa2 aa2 + false + read -r h + echo aa3 aa3 + false + read -r h $ echo $? 1 I still think that this is a bug in the trim script though.