Читайте вывод команды построчно в 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