Я проверил описанный ниже метод, и он работал нормально
find path -depth -type d -exec sh /tmp/l.sh {} \;
/tmp/l.sh==> Its the script path
Поскольку это 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")
141 — это значение, которое $?
получает, если процесс завершается из-за сигнала 13, который в Linux равенSIGPIPE
(см. сигнал (7)). Вот что получает процесс, если он пытается записать в канал без читателей. Обычно вы не увидите это возвращаемое значение, поскольку статус возврата канала — это статус последнего процесса в нем. Но с установленным pipefail
Bash возвращает последнее ошибочное значение.
$ (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