Fórum Root.cz
Hlavní témata => Software => Téma založeno: zu1234 25. 05. 2021, 18:08:07
-
Byl jsem překvapen a stálo mne to nějaký čas:
#!/bin/bash
set -o pipefail
trap '>&2 echo Chyba v $0 na řádku $LINENO: $(sed -n ${LINENO}p $0)' ERR
find . | sed -n '1p' && echo ok || echo error
find . | head -1 && echo ok || echo error
find . | head -1
Vysvětlení je například zde:
http://www.greenend.org.uk/rjk/tech/shellmistakes.html#pipeerrors
-
A řeší se to pomocí mispipe z balíku moreutils.
-
Pokud by roura byla delší než dva členy, tak by to asi šlo řešit i takto:
#!/bin/bash
set -o pipefail
(( for (( I=0; I < 4000; I++ )); do echo "a"; done) || [[ $? -eq 141 ]]) \
| ( sed 's/a/b/g' || [[ $? -eq 141 ]] ) \
| ( sed 's/b/c/g' || [[ $? -eq 141 ]] ) \
| sed '1q' || echo ${PIPESTATUS