LINUX.ORG.RU

bash — как использовать глобальные переменные?

 ,


1

1

Я хочу задать в скрипте глобальную переменную — например количество новых писем. А потом использовать её в других скриптах.

Вроде всё ок:

export gmail_new=2

echo $gmail_new
2

Но во втором терминале пустота:

echo $gmail_new

Как получить действительно глобальные переменные?

Экспорт виден только потомкам.

Правь «архитектуру», или используй конфиги (файлы / gconf / whatever).

anonymous
()
Ответ на: комментарий от anonymous

Так я ведь как раз и хотел избавиться от костылей в виде файлов и tmpfs :(

ksevelyar
() автор топика

нифига себе. а ты вообще в курсе, что отдельный скрипт работает в отдельном процессе интерпретатора

более того, даже на сях глобальные переменные не глобальны между процессами, без спец. действий

anonymous
()

Вызывай первый скрипт с переменной в начале других скриптов через source, если это возможно в твоём случае.

anonymous
()

ksevelyar

Вроде всё ок:

export gmail_new=2

export экспортирует переменную не наружу, а внутрь. Т.е. эта переменная будет видна дочерним процессам. Экспортировать переменную родительскому процессу невозможно, и это не баг, а фича. (а то какой-нить скрипт мог-бы изменить скажем EDITOR, и вместо(вместе) с редактором запустилась-бы какая-нить вредоносная НЁХ)

drBatty ★★
()
Ответ на: комментарий от ksevelyar

ksevelyar

Ну значит пусть будут файлики и tmpfs.

ну иногда действительно можно через source, эта команда работает как #include в C/C++, т.е. текст после source просто «вставляется» внутрь текущего скрипта. Т.е. всё выполняется в одном процессе с одними переменными.

Часто пишут такие файлы:

VAR1=1
VAR2=2
VAR3=3

их потом можно включать внутрь скрипта командой source. Естественно, они сгодятся и как глобальные переменные, менять их можно например так:

sed -i 's/^VAR1=.*$/VAR1=17/' globals.sh

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