Ответ 1
Это связано с тем, что grep -q
сразу же выходит с нулевым статусом, как только будет найдено совпадение. Команда zfs
все еще записывает в трубку, но нет читателя (потому что grep
вышел), поэтому он отправляет сигнал SIGPIPE
из ядра и выходит со статусом 141
.
Другим распространенным местом, где вы видите это поведение, является head
. например.
$ seq 1 10000 | head -1
1
$ echo ${PIPESTATUS[@]}
141 0
В этом случае head
считывает первую строку и завершает генерирование сигнала SIGPIPE
, а seq
- с 141
.
См. "Сигнал непонятного SIGPIPE" в Руководстве для программистов Linux.