|
|
ru.unix- RU.UNIX ---------------------------------------------------------------------- From : Eugene B. Berdnikov 2:5020/400 10 Dec 2000 06:03:36 To : Alexey Morozov Subject : Re: Памяти любителей shell программинга посвящается -------------------------------------------------------------------------------- Alexey Morozov <morozov@novosoft.ru> wrote: AM> cat "$MOUNTF" | while read D_WHAT D_WHERE D_TYPE args [...] AM> do AM> if [ "${D_WHERE:-nothing}" = "/" ] AM> then AM> ROOTFS="$D_WHAT" AM> ROOTFSTYPE="$D_TYPE" AM> export ROOTFS AM> export ROOTFSTYPE AM> echo "(Process $$) Found ROOTFS: ('$ROOTFS':'$ROOTFSTYPE')" AM> fi AM> done AM> AM> echo "(Finally $$) Found ROOTFS: ('$ROOTFS':'$ROOTFSTYPE')" AM> ------------------------------------------------------------- AM> Вот такой вот простецкий скрипт, который я старался писать максимально AM> аккуратно. Внимание, вопрос: у кого что напечаталось в результате его AM> исполнения? Я пробовал на bash-2.03.0(1)-release, bash-2.04.11(1)-release, AM> ash какой-то версии, ksh-5.2.12, и результаты меня, мягко говоря, озадачили. AM> Это так и задумано, что из простого while'а в рамках _одного процесса_ AM> не передать переменные наружу?? Hеделю назад обсуждали вроде (может, в ru.linux, не помню). Смысл простой: многие шеллы последний pipeline исполняют HЕ в контексте основного процесса даже для builtin-команд. В частности, bash. Если нужен нормальный борновский шелл - рекомендую zsh. Если портабильность скрипта - судьба писать жутко уродливый код. Хотя в данном случае задача решается достаточно просто и прямо: while read D_WHAT D_WHERE D_TYPE args ; do .... ; done < "$MOUNTF" -- Eugene Berdnikov --- ifmail v.2.15dev5 * Origin: Institute for High Energy Physics, Protvino, Russia (2:5020/400) Вернуться к списку тем, сортированных по: возрастание даты уменьшение даты тема автор Архивное /ru.unix/5353e4039972.html, оценка из 5, голосов 10
|