Fórum Root.cz

Hlavní témata => Software => Téma založeno: zu1234 25. 05. 2021, 18:08:07

Název: Zajímavost v bash: find | head
Přispěvatel: 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
Název: Re:Zajímavost v bash: find | head
Přispěvatel: _Jenda 25. 05. 2021, 19:20:17
A řeší se to pomocí mispipe z balíku moreutils.
Název: Re:Zajímavost v bash: find | head
Přispěvatel: zu1234 28. 05. 2021, 18:36:16
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