Вопрос № 173614: Здравствуйте, уважаемые эксперты! Хотел бы услышать подробный и понятный ответ на вопрос, что такое переменные окружения в Linux (оболочка bash), как их изменять и т.д. В сети посмотрел, там как-то все не то. Возможно, вопрос станет конкретнее, ес...
Вопрос № 173614:
Здравствуйте, уважаемые эксперты! Хотел бы услышать подробный и понятный ответ на вопрос, что такое переменные окружения в Linux (оболочка bash), как их изменять и т.д. В сети посмотрел, там как-то все не то. Возможно, вопрос станет конкретнее, если я поясню зачем именно мне они нужны. Допустим, есть компилятор lf95 для фортрана, его надо поставить, а для этого, как мне говорили спецы, нужно сначала что-то прописать в переменных окружения...Заранее спасибо!
Переменные окружения - это основное средство для хранения различных настроек, задаваемых и системой и пользвателем. По форме - это обычные переменные, которые задаются как и в любой другой программе, по сути - некие "мини-хранилища" данных, которые Вы потом можете использовать во всех скриптах и программах, написанных на любом языке. Переменная окружения инициализируется в момент запуска процесса оболочки /bin/bash (в Вашей системе пуь может отличаться) из файла ~.bashrc
(или ~.shrc) и существует в течение всего времени, пока данная копия оболочки не завершит работу. Выделенный момент очень важен - если Вы создаете переменную окружения, а потом закрываете оболочку, переменная исчезает. Ее также можно задать вручную непосредственно в самом скрипте. Любая программа, запущенная в данной копии оболочки, может получить доступ к переменным окружения, существовавшим в тот момент, когда данная программа была запущена. Основное назнач
ение переменных окружения - передавать некоторую информацию в те программы, которые будут в данной оболочке впоследствие запускаться.
Имя переменной окружения выбирается произвольно, оно может состоять из символов латиницы и знака подчеркивания. Общепринято в тексте программ, скриптов и документации писать имена переменных окружения БОЛЬШИМИ буквами, при этом как такового ограничения на длину нет, например: PKG_CONFIG_DISABLE_UNINSTALLED. Значение переменной окружения задается в текстовом виде, Вы не
можете передавать двоичные значения. Как такового ограничения или какого-либо форматирования не предусмотрено - все, что будет указано после знака равенства - все будет установлено в качестве значения и передано в запросившую программу, например: PKG_CONFIG_PATH=/usr/X11R6/libdata/pkgconfig:/usr/X11R6/qt33/libdata/pkgconfig:/usr/local/kde3/libdata/pkgconfig
Разбор значения переменной окружения - прерогатива программиста. Наиболее известное применение переменной
окружения - это получение информации о том, где оболочка может искать запускаемый файл. Если Вы вводите просто имя файла команды, не предваряя его полным путем, то оболочка обращается к заранее оговоренной переменной окружения (как правило это переменная PATH), в которой заранее перечислены все пути, где данная команда может находиться. Если ни в одном из этих мест команда не была найдена, Вы увидите сообщение о том, что команда не найдена. Скорее всего именно путь к каталогу, где будет установлен Ваш компилятор
- и нужно прописать в переменную PATH. Все переменные окружения, используемые самой оболочкой, как правило перечислены в мануале, их достаточно много, некоторые используются очень часто, некоторые крайне редко.
Для того, чтобы переменная окружения не исчезала при завершении работы командной оболочки, ее можно "экспортировать", то есть с помощью специальной команды (в /bin/bash это export) передать в оболочку более высокого уровня (ту, что запустила
работающую в данный момент оболочку). Как правило, все переменные окружения, задаваемые в .bashrc экспортируются, потому что иначе они исчезнут сразу же после того, как оболочка дочитает (а по сути - закончит выполнять) файл .bashrc
Что прописывать и где прописывать. Как правило, что прописывать и в каком формате это "что" должно быть - указывается в документации к программе. Если документации нет, а достоверно известно, что переменные окружения используются - можно посмотреть код программы,
если он доступен, на предмет наличия вызовов функции типа getenv() . Прописывается же переменная окружения или непосредственно в скрипте перед запуском программы, например при запуске с помощью команды env, если таковая имеется в Вашей системе - env TESTVAR=testvalue /usr/bin/myprogram. В результате программа myprogram при запуске получит окружение, в которое будет вставлена переменная TESTVAR со значением testvalue. Можно также создать небольшой скриптик, состоящий толь
ко из строк задания переменной окружения и запуска программы. Такие способы очень хороши для отладки, когда требуется придавать различным
переменным окружения разнообразные произвольные значения. Для постоянного задания переменной окружения ее следует включить в файл, который читается при запуске оболочки (.bashrc для /bin/bash, при его отсутствии может читаться .shrc и/или .profile, подробности уточняйте в руководстве по оболочке) и обязательно экспортировать ее.
----- Si vis pacem, para bellum
Ответ отправил: Rashid N. Achilov, Практикант
Ответ отправлен: 23.10.2009, 22:40
Оценка ответа: 5 Комментарий к оценке: Спасибо за столь подробное описание!
Как сказать этому эксперту "спасибо"?
Отправить SMS
#thank 255767
на номер 1151 (Россия) |
Еще номера »
Вам помогли? Пожалуйста, поблагодарите эксперта за это!
Отвечает vladisslav, 5-й класс :
Здравствуйте, Gerhard. Переменный окружения в linux то же самое, что и переменные окружения в DOS или Windows. Набор сопоставленных пар ключ - значение. В общем случае для запуска программы с измененным окружением используется команда env. Вызывается следующим образом: env [OPTION]... [-] [NAME=VALUE]... [COMMAND [ARG]...] опции: -i, --ignore-environment Запуск с пустым окружением (в окружении будут только явно объявленные переменные -u, --unset=NAME Удалить
переменную окружения с указанным именем Указание первым аргументом дефиса "-" дает тот же эффект, что и опция -i Далее следуют пары опция=значение, первый аргумент, не содержащий "=" используется как имя программы, следующие за ним аргументы становятся аргументами программы. Так как в вашем частном случае используется оболочка bash, то можно воспользоваться ее встроенными возможностями: $ NAME=VALUE NAME=VALUE .... COMMAND [ARG] То
есть просто указываем новые значения переменных перед именем вызываемой программы. Для того чтобы установить переменные один раз и не указывать при последующих вызовах их значения повторно, можно воспользоваться встроенной командой bash export: $ export NAME=VALUE ... после этого указанные значения переменных окружения будут действительны для всех последующих команд, выполненных в данном экземпляре bash. Если вы хотите установить новые значения переменных окружения и для последующих запусков bash,
добавьте их объявления в конец файла .bashrc, находящегося в вашем домашнем каталоге (в случае отсутствия создайте). Если вы хотите установить новые значения переменных окружения глобально для всех пользователей, то следует отредактировать файл /etc/environment Конкретно для lf95 процедура установки предполагает как альтернативу установке LD_LIBRARY_PATH настройку загрузчика через редактирование /etc/ld.so.conf Например если у вас будет установлена версия 6.2,
то исполняемые файлы будут лежать в каталоге /usr/local/lf9562/bin , библиотеки в /usr/local/lf9562/lib и для запуска потребуется добавить к PATH первый каталог и установить LD_LIBRARY_PATH=/usr/local/lf9562/lib , то есть запускать так $ PATH=$PATH:/usr/local/lf9562/bin LD_LIBRARY_PATH=/usr/local/lf9562/lib lf95 file.f90 либо добавить строки PATH=$PATH:/usr/local/lf9562/bin LD_LIBRARY_PATH=/usr/local/lf9562/lib в конец файла .bashrc в домашнем каталоге либо добавить ":/usr/local/lf9562/bin"
в конец соответствующей строки в /etc/environment , добавить строку /usr/local/lf9562/lib в /etc/ld.so.conf и однократно запустить ldconfig. После этого запуск для всех пользователей будет выглядеть так lf95 file.f90
Ответ отправил: vladisslav, 5-й класс
Ответ отправлен: 23.10.2009, 22:55
Оценка ответа: 5 Комментарий к оценке: Ваш ответ мне особенно понравился тем, что приведены конкретные примеры для lf95. Есть пара доп. вопросов - см. минифорум
Как сказать этому эксперту "спасибо"?
Отправить SMS
#thank 255769
на номер 1151 (Россия) |
Еще номера »
Вам помогли? Пожалуйста, поблагодарите эксперта за это!
Оценить выпуск »
Нам очень важно Ваше мнение об этом выпуске рассылки!
* Стоимость одного СМС-сообщения от 7.15 руб. и зависит от оператора сотовой связи.
(полный список тарифов)
** При ошибочном вводе номера ответа или текста #thank услуга считается оказанной, денежные средства не возвращаются.
*** Сумма выплаты эксперту-автору ответа расчитывается из суммы перечислений на портал от биллинговой компании.