Shell читать из файлов с хвостом - PullRequest
0 голосов
/ 10 марта 2020

Я сейчас пытаюсь читать из файлов с оболочкой. Тем не менее, я столкнулся с одной проблемой синтаксиса. Мой код ниже:

while read -r line;do
    echo $line
done < <(tail -n +2 /pathToTheFile | cut -f5,6,7,8 | sort | uniq )

Тем не менее, он возвращает мне ошибку syntax error near unexpected token ('`

Я пытался с помощью следующего Как использовать при чтении строки с tail -n но все равно не вижу ошибки.

Команда tail работает правильно.

Любая помощь будет оценена.

Ответы [ 2 ]

1 голос
/ 10 марта 2020

замена процесса не поддерживается оболочкой posix / bin / sh. Это особенность, специфицируемая от c до bash (и других не-posix-оболочек). Вы запускаете это в / bin / bash?

В любом случае, подстановка процесса здесь не нужна, вы можете просто использовать канал, например:

tail -n +2 /pathToTheFile | cut -f5,6,7,8 | sort -u | while read -r line ; do
    echo "${line}"
done
1 голос
/ 10 марта 2020

Ваш переводчик должен быть #!/bin/bash, а не #!/bin/sh, и / или вы должны запустить скрипт с bash scriptname вместо sh scriptname.

Почему?

Оболочка POSIX не обеспечивает замена процесса . Подстановка процессов (например, < <(...)) является башизмом и недоступна в оболочке POSIX. Итак, ошибка:

syntax error near unexpected token('

говорит вам, что как только скрипт попадает в оператор done и пытается найти файл, перенаправленный на l oop, он находит '(' и дросселирует. (это также говорит нам о том, что вы вызываете свой скрипт с оболочкой POSIX вместо bash - и теперь вы знаете, почему)

...