Как при чтении строки с конвейером

Вы вызываете команду оболочки return, что не имеет смысла. В общем случае, команда return без последующего значения возвращает статус выхода последней выполненной команды.

Из команды man: Причиняет функцию к выходу со значением возврата, заданным n. Если n опущено, то статус возврата - это статус последней выполненной команды в теле функции.

.
1
29.07.2015, 04:30
2 ответа

<<< в bash - это здесь строка . Вы передали саму строку сценария tac /DIRECTORY/TO/FILE.csv ... в , в то время как стандартный ввод .

Возможно, вы захотели использовать замену процесса :

while read f1 f2 f3 f4 f5 f6 f7 f8 f9 f10 f11 f12 f13 f14 f15
do
    ...
done < <(tac /DIRECTORY/TO/FILE.csv ...)
1
27.01.2020, 23:37

вы можете попробовать

tac /DIRECTORY/TO/FILE.csv |
sed -e 's/o,632/o,101/g' -e  's/o,938/o,103/g'  -e 's/o,510/o,112/g' -e 's/ombo,713/ombo,102/g' |
while read f1 f2 f3 f4 f5 f6 f7 f8 f9 f10 f11 f12 f13 f14 f15
do

            if [ "$f7" = "EnHr" ] && [ "$f10" -gt 0 ] && [ "$f4" = "$m_class" ] && [ "$f5" = "$m_id" ]
            then
                    hex_sensor_data=$f10
                    echo "IN IF LOOP: $hex_sensor_data"
                    break
            fi
done
  • нет необходимости использовать новую строку в обратном порядке, если последний символ является каналом ( | )
  • один sed может запускать все замены
1
27.01.2020, 23:37

Теги

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