19.09.2020, 19:12 [+3 UTC]
в нашей команде: 4 736 чел. | участники онлайн: 2 (рекорд: 21)

:: РЕГИСТРАЦИЯ

задать вопрос

все разделы

правила

новости

участники

доска почёта

форум

блоги

поиск

статистика

наш журнал

наши встречи

наша галерея

отзывы о нас

поддержка

руководство

Версия системы:
7.90 (14.08.2020)
JS-v.1.45 | CSS-v.3.39

Общие новости:
13.04.2020, 00:02

Форум:
04.09.2020, 20:48

Последний вопрос:
18.09.2020, 19:31
Всего: 152894

Последний ответ:
18.09.2020, 15:10
Всего: 260423

Последняя рассылка:
19.09.2020, 01:45

Писем в очереди:
0

Мы в соцсетях:

Наша кнопка:

RFpro.ru - здесь вам помогут!

Отзывы о нас:
03.07.2012, 15:58 »
Pavel Korchagin
Спасибо, помогло. [вопрос № 186430, ответ № 271320]
04.04.2010, 13:25 »
Dimon4ik
Все что нужно! Отлично! Спасибо большое. [вопрос № 177659, ответ № 260582]
20.10.2009, 09:58 »
Хиноцкий Ярослав Владимирович
Спасибо за ответ, в моих вопросах, вопрос о драйвере самый актуальный, обязательно попробую Ваш вариант [вопрос № 173452, ответ № 255618]

РАЗДЕЛ • Linux / UNIX

Системное администрирование, установка и настройка Linux и UNIX-операционных систем.

[администратор рассылки: Хватов Сергей (Академик)]

Лучшие эксперты в этом разделе

zelshag
Статус: 1-й класс
Рейтинг: 21
Алексеенко С.Ю.
Статус: Бакалавр
Рейтинг: 9
SAW
Статус: Студент
Рейтинг: 4

Перейти к консультации №:
 

Консультация онлайн # 173614
Раздел: • Linux / UNIX
Автор вопроса: Gerhard
Отправлена: 23.10.2009, 21:08
Поступило ответов: 2

Здравствуйте, уважаемые эксперты!
Хотел бы услышать подробный и понятный ответ на вопрос, что такое переменные окружения в Linux (оболочка bash), как их изменять и т.д. В сети посмотрел, там как-то все не то. Возможно, вопрос станет конкретнее, если я поясню зачем именно мне они нужны. Допустим, есть компилятор lf95 для фортрана, его надо поставить, а для этого, как мне говорили спецы, нужно сначала что-то прописать в переменных окружения...Заранее спасибо!

Состояние: Консультация закрыта

Ответ # 255767 от Rashid N. Achilov

Здравствуйте, Gerhard.

Переменные окружения - это основное средство для хранения различных настроек, задаваемых и системой и пользвателем. По форме - это обычные переменные, которые задаются как и в любой другой программе, по сути - некие "мини-хранилища" данных, которые Вы потом можете использовать во всех скриптах и программах, написанных на любом языке. Переменная окружения инициализируется в момент запуска процесса оболочки /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, подробности уточняйте в руководстве по оболочке) и обязательно экспортировать ее.


Консультировал: Rashid N. Achilov
Дата отправки: 23.10.2009, 22:40

5
Спасибо за столь подробное описание!
-----
Дата оценки: 24.10.2009, 10:44

Рейтинг ответа:

0

[подробно]

Сообщение
модераторам

Отправлять сообщения
модераторам могут
только участники портала.
ВОЙТИ НА ПОРТАЛ »
регистрация »

Ответ # 255769 от vladisslav

Здравствуйте, 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
Дата отправки: 23.10.2009, 22:55

5
Ваш ответ мне особенно понравился тем, что приведены конкретные примеры для lf95. Есть пара доп. вопросов - см. минифорум
-----
Дата оценки: 24.10.2009, 10:46

Рейтинг ответа:

0

[подробно]

Сообщение
модераторам

Отправлять сообщения
модераторам могут
только участники портала.
ВОЙТИ НА ПОРТАЛ »
регистрация »

Мини-форум консультации № 173614
Gerhard

# 1

= общий = | 24.10.2009, 10:51

Снова всем добрый день!
Допустим я добавлю строки
PATH=$PATH:/usr/local/lf9562/bin
LD_LIBRARY_PATH=/usr/local/lf9562/lib
в файл bashsrc, но как lf95 догадается, что это (в частности PATH) переменная именно для него и будут ли, если их прописать в bashsrc, переменные экспортированы?
Кстати, почему у PATH в начале стоит $PATH, а у LD_LIBRARY_PATH нет?

lupus campestris

# 2

= общий = | 24.10.2009, 18:13

Gerhard:
Через ":" идет перечисление путей.
Когда присваивается значение для переменной, то она пишется без $ в начале, а когда Вы ее употребляете, то с $. Например:
a=5
echo $a
Переменная PATH универсальная, она для всего, что у Вас запускается и работает. Такие переменные для удобства обозначают большими буквами. И их присвоение прописано в стартовых скриптах. А когда что-то новое запускается, оно проверяет, установлена ли нужная ему переменная и сообщает Вам, если что-то не так.

Gerhard

# 3

= общий = | 24.10.2009, 20:54

lupus campestris:
Спасибо, вроде понял. Еще один вопросик - эксперт vladisslav написал, что запускать надо как lf95 file.f90...А если у программы на фортране (для которой компилятор) есть makefile и в нем в опции FC прописать просто FC=lf95 и потом запустить make будет ли этого достаточно?

lupus campestris

# 4

= общий = | 24.10.2009, 21:00

Gerhard:
С фортраном не сталкивалась, поэтому не смогу ответить, к сожалению.

Rashid N. Achilov

# 5

= общий = | 24.10.2009, 22:40

Gerhard:
Если есть makefile, то он будет работать по общим правилам преобразования, которые там написаны или же по общим правилам преобразовния для суффикса f90. В любом случае нужно видеть текст makefile, чтобы ответить на вопрос, достаточно будет или нет

По поводу записи вида VAR=$VAR:bla:blabla:blablabla. Такая запись используется при дополнении текущего значения переменной и означает "взять текущее значение переменной VAR и дописать к ней всю остальную строку"

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

 

Возможность оставлять сообщения в мини-форумах консультаций доступна только после входа в систему.
Воспользуйтесь кнопкой входа вверху страницы, если Вы зарегистрированы или пройдите простую процедуру регистрации на Портале.

Rambler's Top100

главная страница | поддержка | задать вопрос

Время генерирования страницы: 0.17442 сек.

© 2001-2020, Портал RFPRO.RU, Россия
Калашников О.А.  |  Гладенюк А.Г.
Версия системы: 7.90 от 14.08.2020
Версия JS: 1.45 | Версия CSS: 3.39