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 в конце скрипта не выводит ничего. Как из цикла передать переменную?


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

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

Deleted ()

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

Мало-мало башизм. Только мотив, но доделать легко:

while read a ; do echo $a; error=nonzero; done < <(ls -l)
$ echo $error
nonzero

io ★★ ()

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

Попробуй в цикле:
result="error"
заменить на:
export result="error"

iron ★★★★★ ()

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

> ls -l ( while read FILE ;
Что это вообще за конструкция ? Это на каком языке написано ?
bash на такое говорит: syntax error near unexpected token `('

spirit ★★★★★ ()
Ответ на: Re: передать переменную из цикла while от iron

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

> Попробуй в цикле:
> result="error"

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

> export result="error"



export в другую сторону работает - он позволяет потомкам наследовать переменную среды родительского процесса. А автору топика нужно наоборот.

Deleted ()
Ответ на: Re: передать переменную из цикла while от spirit

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

> > ls -l ( while read FILE ;
> Что это вообще за конструкция ? Это на каком языке написано ?

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


Подозреваю что кто-то съел '|'. Хотя всё равно не понятно зачем круглые скобки.

Deleted ()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.