Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Bash compound command

59K
16 апреля 2010 года
sknaumov
1 / / 16.04.2010
Здравствуйте.

Не знает ли кто, как можно заставить присваивание внутри {} секции работать для всего скрипта, если данная секция использовалась в pipe.

Ситуация: не хочется засорять систему tmp файлами, поэтому делаю следующее:

size=0
cat $cfgpath | grep -v "^#" | {
while read -t 1 mountpoint sz
do
let "size = size + sz"
done
}

Но переменная size остается равной нулю.
Если же использовать {} вне pipe, то присваивания не теряются.

Спасибо.
43K
17 апреля 2010 года
loki231
76 / / 27.09.2009
Команды, запускаемые через "|", выполняются отдельными sub-shell, порождаемыми по одному на каждую команду. Соответственно и переменные среды у каждой такой команды свои, и изменения какой-либо переменной не распространяются на переменные среды родительского процесса.

В Вашем случае можно поступить так:
 
Код:
size=$(grep -v "^#" < $cfgpath | {
    size=0
    while read -t 1 mountpoint sz; do
        let "size = size + sz"
    done
    echo $size
})
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог