LINUX.ORG.RU
ФорумAdmin

передать переменную из цикла while


0

0
Есть цикл:

ls -l ( while read FILE ;

do

test BLA-BLA-BLA {
result="error"
continue
}
result="ok"
exit

done)

echo $result

Так вот, переменная result принимает значения "error" или "ok",
но по завершению цикла она стирается... echo в конце скрипта не выводит ничего. Как из цикла передать переменную?

Внутренности цикла работают в отдельно fork'нутом процессе шелла, так что при выходе из него все внутренние переменные среды теряются, а не передаются процессу-предку. Можно просто вывести в цикле значение на стандартный вывод или в файл, а вне цикла прочитать.
Deleted
()
Мало-мало башизм. Только мотив, но доделать легко:

while read a ; do echo $a; error=nonzero; done < <(ls -l)
$ echo $error
nonzero
io ★★
()
> ls -l ( while read FILE ;
Что это вообще за конструкция ? Это на каком языке написано ?
bash на такое говорит: syntax error near unexpected token `('
spirit ★★★★★
()
Ответ на: комментарий от iron
> Попробуй в цикле:
> result="error"

> заменить на:

> export result="error"



export в другую сторону работает - он позволяет потомкам наследовать переменную среды родительского процесса. А автору топика нужно наоборот.
Deleted
()
Ответ на: комментарий от spirit
> > ls -l ( while read FILE ;
> Что это вообще за конструкция ? Это на каком языке написано ?

> bash на такое говорит: syntax error near unexpected token `('


Подозреваю что кто-то съел '|'. Хотя всё равно не понятно зачем круглые скобки.
Deleted
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.