Читайте вывод команды построчно в sh (без bash)

Я в основном ищу способ сделать это

list=$(command)
while read -r arg
do
        ...
done <<< "$list"

Используя sh intead из bash. Код, как он есть, не выполняется из-за последней строки:

syntax error: unexpected redirection

Какие-нибудь исправления?

Редактировать: мне нужно редактировать переменные и обращаться к ним вне цикла, поэтому с помощью | недопустимо (так как создает суб-оболочку с независимой областью действия)

Изменить 2: Этот вопрос НЕ похож на Почему мой счетчик Bash сбрасывается после цикла while, поскольку я не использую | (как я только что заметил в последнем редактировании). Я прошу другой способ достижения этого. (Ответы на связанный вопрос только объясняют, почему проблема возникает, но не предоставляют никаких решений, которые работают с sh (без bash).

2 ответа

Решение

Нет чисто синтаксического способа сделать это в POSIX sh, Вам нужно будет использовать либо временный файл для вывода команды, либо именованный канал.

mkfifo output
command > output &

while read -r arg; do
    ...
done < output
rm output

По какой причине ты не можешь этого сделать? Должно работать.. если вы не назначаете какие-либо переменные внутри цикла, которые вы хотите видеть, когда это будет сделано.

 command |
 while read -r arg
 do
         ...
 done
Другие вопросы по тегам