Основной сбой после SIGPIPE

Я проверил описанный ниже метод, и он работал нормально

find path  -depth -type d -exec sh /tmp/l.sh {} \;

/tmp/l.sh==> Its the script path
1
16.02.2020, 23:50
2 ответа

Поскольку это bash, вы можете подумать о PIPESTATUS

command exit 1 | command exit 2 | command exit 3 | foobar; declare -p PIPESTATUS

После предупреждения о том, что foobarне найдено, вы должны получить значениеPIPESTATUS

 declare -a PIPESTATUS=([0]="1" [1]="2" [2]="3" [3]="127")
1
28.04.2021, 23:23

141 — это значение, которое $?получает, если процесс завершается из-за сигнала 13, который в Linux равенSIGPIPE(см. сигнал (7)). Вот что получает процесс, если он пытается записать в канал без читателей. Обычно вы не увидите это возвращаемое значение, поскольку статус возврата канала — это статус последнего процесса в нем. Но с установленным pipefailBash возвращает последнее ошибочное значение.

$ (echo x; sleep 1; echo y) | head -1 >/dev/null ; echo $?
0

$ set -o pipefail
$ (echo x; sleep 1; echo y) | head -1 >/dev/null ; echo $?
141
0
28.04.2021, 23:23

Теги

Похожие вопросы