Форум русскоязычного сообщества Ubuntu


Следите за новостями русскоязычного сообщества Ubuntu в Twitter-ленте @ubuntu_ru_loco

Автор Тема: Переменные в bash задаются только в bashrc, profile?(прав. ответ - не только)  (Прочитано 3418 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн wl

  • Автор темы
  • Старожил
  • *
  • Сообщений: 1393
    • Просмотр профиля
В других скриптах не задаются?

Есть скрипт с именем $HOME/FWtools/fwtools_env.sh, задающий переменные окружения для работы этих самых FWtools.

Вот выдержка

#!/bin/bash

export FWTOOLS_HOME=/home/wl/FWTools
export PROJ_LIB=$FWTOOLS_HOME/share/proj
export GEOTIFF_CSV=$FWTOOLS_HOME/share/gdal
export PATH=${FWTOOLS_HOME}/bin:${FWTOOLS_HOME}/bin_safe:$PATH

(и еще несколько экспортов)
...

Выполняю его:
$ ./FWTools/fwtools_env.sh

далее проверяю:
$ echo $FWTOOLS_HOME

(т.е. пусто)                                                 

$ echo $PATH
/usr/lib/kde4/bin:/usr/lib/kde4/bin/:/home/wl/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games
(т.е. как было до скрипта)

$ echo $GEOTIFF_CSV

(тоже пусто)

Почему??

При этом, все, что экпортируется в ~/.bashrc, экспортируется.

Если я в конце скрипта добавлю вызов bash, то в шелле - "потомке" все переменные видны.

Я что-то забыл?
« Последнее редактирование: 06 Июня 2008, 15:08:14 от wl »
На свете феньки есть такие, брат Горацио, которых лохи просто не секут. (Шекспир, "Гамлет", вольный перевод)

Оффлайн ziv

  • Активист
  • *
  • Сообщений: 403
    • Просмотр профиля
Все эти переменные, которые ты задаешь, действуют только в том экземпляре баша, который запускается из скрипта. Когда этот экземпляр завершает работу, переменные исчезают.

Оффлайн wl

  • Автор темы
  • Старожил
  • *
  • Сообщений: 1393
    • Просмотр профиля
Задались!
« Ответ #2 : 06 Июня 2008, 14:21:37 »
$ . ./FWTools/fwtools_env.sh
(перед путем и именем файла точка и пробел)

Тогда скрипт выполняется в текущем экземпляре баша (in-place) и переменные, соответственно, остаются.
Я вспомнил, я же использовал когда-то такие конструкции.
На свете феньки есть такие, брат Горацио, которых лохи просто не секут. (Шекспир, "Гамлет", вольный перевод)

Оффлайн Malamut

  • Ubuntu Member
  • Администратор
  • Старожил
  • *
  • Сообщений: 3337
  • Я добрый, честно!
    • Просмотр профиля
    • Моя страница на Launchpad
Кстати, а кто мне скажет, в какой файл надо прописать командочки чтоб они выполнялись ДО запуска консоли и вообще иксов, т.е. чтоб их результат был виден как в любом терминале, так и в консоли. bashrc выполняется только при запуске эмулятора терминала, а мне же нужно кое-что выполнить на уровне системы (для примера, надо изменить PATH для всей системы, добавив к нему путь ./, сейчас делаю export PATH=$PATH:. в bashrc, но очень интересно изменить PATH до запуска bash (он же откуда-то берёт значение PATH по умолчанию?)) Где вообще лежат настройки основных переменных и скрипты начальной инициализации?
"Носителем суверенитета и единственным источником власти в Российской Федерации является ее многонациональный народ" Конституция РФ

Оффлайн wl

  • Автор темы
  • Старожил
  • *
  • Сообщений: 1393
    • Просмотр профиля
Кстати, а кто мне скажет, в какой файл надо прописать командочки чтоб они выполнялись ДО запуска консоли и вообще иксов, т.е. чтоб их результат был виден как в любом терминале, так и в консоли.
/etc/rc.local

Где вообще лежат настройки
/etc

скрипты начальной инициализации?
/etc/init.d/
/etc/rc?.d/

http://www.linux.com/articles/114107
http://www.luv.asn.au/overheads/linux-startup.html
http://www.linux-tutorial.info/modules.php?name=ManPage&sec=7&manpage=init.d

Первые два пункта надо править, разумеется, с sudo.
А init.d - вообще не руками, а скриптом  update-rc.d

Да! И не надо добавлять ./ в путь! Это опасно.
Мало ли чего может оказаться в текущем каталоге... Система предполагает, что все нужные программы лежат в соответствующих каталогах, а если нужно что-то не из доверенного хранилища, надо явно это указать.
Это минимальное средство обеспечения безопасности системы.
« Последнее редактирование: 06 Июня 2008, 17:14:10 от wl »
На свете феньки есть такие, брат Горацио, которых лохи просто не секут. (Шекспир, "Гамлет", вольный перевод)

Оффлайн Malamut

  • Ubuntu Member
  • Администратор
  • Старожил
  • *
  • Сообщений: 3337
  • Я добрый, честно!
    • Просмотр профиля
    • Моя страница на Launchpad
Огромное спасибо, попробую разобраться на досуге!! А то как=то руки не доходили раньше))
А по поводу ./ ... Скажем так, это средство не усиливает безопастность системы, только спасает от неожиданных запусков не той программы по незнанию. Что-то типо sudo: если боитесь (не до конца понимаете что к чему) использовать su - вас от некоторых непритных ситуаций, вызванных исключительно кривыми руками, спасёт sudo. Так же и ./ . Если понимать что к чему, то . в путях по умолчанию никогда ничем не навредит. Зато удобно запускать скрипты и всякие проги. Хотя, честно говоря, сам давно этим не пользуюсь т.к. несколько раз наткнулся на совпадение имён своей программы и одной из системных, это я так, для примера привёл))
"Носителем суверенитета и единственным источником власти в Российской Федерации является ее многонациональный народ" Конституция РФ

 

Страница сгенерирована за 0.049 секунд. Запросов: 24.