ЕСТЬ:
Скрипт sh
-------------------------------------------
var=volue1
cat $fileToParse | while read ....
do
...
var=volue2
...
done
echo ' var '$var
---------------------------------------------
Проблема: результат -- только volue1, все значения переменных, возм-но, и переменные,
используемые в конвейере cat ... | while теряются.ВОПРОС:
Как передать\соxpанить значение переменной var после выполнения cat ... | while ?
>ЕСТЬ:
>Скрипт sh
>-------------------------------------------
>var=volue1
>cat $fileToParse | while read ....
>do
> ...
> var=volue2
> ...
>done
>echo ' var '$var
>---------------------------------------------
>Проблема: результат -- только volue1, все значения переменных, возм-но, и переменные,
>используемые в конвейере cat ... | while теряются.
>
>ВОПРОС:
>Как передать\соxpанить значение переменной var после выполнения cat ... | while ?
>
Не совсем понятна, точнее совсем непонятна Ваша проблема. Судя по Вашему скрипту, если ДЕЙСТВИТЕЛЬНО происходит обработка cat ... | while, то значение var на выходе должно содержать volue2, если же нет, то вполне очевидно, что volue1.
>Не совсем понятна, точнее совсем непонятна Ваша проблема. Судя по Вашему скрипту,
>если ДЕЙСТВИТЕЛЬНО происходит обработка cat ... | while, то значение var
>на выходе должно содержать volue2, если же нет, то вполне очевидно,
>что volue1.Значение volue2 "теряется", если определить другую переменную, напр var2 и писвоить ей значение в обработке cat .. | while, то по завершении cat её значение будет пустым.
cat ... | while read ...
do
...
var2=volume21
echo ' var2 is : '$var2
...
done
echo 'var2 after cat is : '$var2
Первый вывод выведет значение
var2 is : volume21Второй вывод введет пустое
var2 is :Переменная удалена после завершения cat ... | while ...
т. е. для выполнения cat sh выделила "отдельный" набор переменных, который затем был
удален.Как "передать" значения из отдельной сессии sh или "назначить" имеющиеся переменные к использованию в отдельной сессии sh?
>Не совсем понятна, точнее совсем непонятна Ваша проблема. Судя по Вашему скрипту,
>если ДЕЙСТВИТЕЛЬНО происходит обработка cat ... | while, то значение var
>на выходе должно содержать volue2, если же нет, то вполне очевидно,
>что volue1.Вы бы сперва проверили, а потом рассуждали теоритически.
Здесь Вам не тут, в баше другие законы :)
>
>>Не совсем понятна, точнее совсем непонятна Ваша проблема. Судя по Вашему скрипту,
>>если ДЕЙСТВИТЕЛЬНО происходит обработка cat ... | while, то значение var
>>на выходе должно содержать volue2, если же нет, то вполне очевидно,
>>что volue1.
>
>Вы бы сперва проверили, а потом рассуждали теоритически.
>Здесь Вам не тут, в баше другие законы :)
Сорри, с башем не дружу. В "чистом" sh все работает. :)
Эта проблема (хоть это и не проблема вовсе) не раз уже обсуждалась.
Вдумайтесь, что происходит: cat через пайп запускает новый процесс с while. следовательно, все окружение процесса с while теряется при выходе из него.Решение - использовать что-то вроде:
while ... done < <(cat ...)
>Эта проблема (хоть это и не проблема вовсе) не раз уже обсуждалась.
>
>Вдумайтесь, что происходит: cat через пайп запускает новый процесс с while. следовательно,
>все окружение процесса с while теряется при выходе из него.
>
>Решение - использовать что-то вроде:
>while ... done < <(cat ...)
Cпсб,использовал:
----------------------------------
while read ...
do
...
var=volume2
...
done < $fileToBeReadName
echo $var
----------------------------------Результат: полученные в цикле while значения.