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


Увидели сообщение с непонятной ссылкой, спам, непристойность или оскорбление?
Воспользуйтесь ссылкой «Сообщить модератору» рядом с сообщением!

Автор Тема: Не могу установить переменную окружения  (Прочитано 3735 раз)

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

Оффлайн laborant5

  • Автор темы
  • Новичок
  • *
  • Сообщений: 4
    • Просмотр профиля
Ubuntu 10.04 LTS Lucid Lynx

Создаю скрипт в домашней директории
#!/bin/bash         

echo "Hello, World"
export FOO=borland
echo $FOO

запускаю ./hello.sh
вижу
Hello, World
borland
набираю
echo $FOO

Вижу пустую строку.
и в env нету FOO

Я сейчас осуществляю знакомство с системой,
возможно что то делаю не так.
Буду рад, если кто-то подскажет в чем прикол

Оффлайн inkblack

  • Старожил
  • *
  • Сообщений: 1216
    • Просмотр профиля
Насколько я понимаю, при запуске вашего скрипта запускается новая копия bash. У него своя копия environment. В ней устанавливается значение FOO. Когда скрипт заканчивает работу, всё это уничтожается, и вы возвращаетесь к старой env без FOO :-(
Делюсь знаниями, но их у меня мало!

Оффлайн laborant5

  • Автор темы
  • Новичок
  • *
  • Сообщений: 4
    • Просмотр профиля
так я же делаю export

Оффлайн inkblack

  • Старожил
  • *
  • Сообщений: 1216
    • Просмотр профиля
Да, в мане написано, что должен экспортировать, ан нет...
Делюсь знаниями, но их у меня мало!

Оффлайн elestan

  • Новичок
  • *
  • Сообщений: 20
    • Просмотр профиля
запиши команду export в файл ~/.bashrc

Оффлайн inkblack

  • Старожил
  • *
  • Сообщений: 1216
    • Просмотр профиля
Делюсь знаниями, но их у меня мало!

Оффлайн laborant5

  • Автор темы
  • Новичок
  • *
  • Сообщений: 4
    • Просмотр профиля
Вот тут решение: http://www.linux.org.ru/forum/development/1510457;jsessionid=F4456562D7839EA279B96A1B16537B0E
Спасибо, ценная инфа. Жаль пока проверить не могу.

Оффлайн inkblack

  • Старожил
  • *
  • Сообщений: 1216
    • Просмотр профиля
Всё работает, но два вопроса остались:

1. Почему это работает? Что значит
. ./myscriptи чем это отличается от
./myscript?
— ага, примерно понятно.

2. Теперь берем такой myscript:
#!/bin/bash
ps
export foo=bar
echo   $foo
Запускаем его в tty1:
al@eee70:~$ . ./myscript
  PID TTY          TIME CMD
 4142 tty1     00:00:00 bash
 6180 tty1     00:00:00 ps
bar
al@eee70:~$ echo $foo
bar
al@eee70:~$
Проверяем в tty2:
al@eee70:~$ ps -e |grep bash
 4142 tty1     00:00:00 bash
 4665 tty2     00:00:00 bash
al@eee70:~$ echo $foo

al@eee70:~$

То есть env устанавливается всё равно не глобально, а только для того процесса, который запускал скрипт.
Да, и ещё: export не обязательно делать.
. ./ работает и без export.

— ну да, так и должно быть.

В общем, сначала я всё это написал, а потом почитал man bash, в районе строки 3700 — там довольно ясно изложено. Вывод: export в данном случае не нужен. Попробуем понять, для чего он реально нужен...

Поправочка:

В man bash в 10.04 этого нет, кажись.

Я читал man bash в 9.04. Вот там в районе строки 3700 есть...

« Последнее редактирование: 14 Мая 2010, 08:08:31 от inkblack »
Делюсь знаниями, но их у меня мало!

Оффлайн фирэфохэ

  • Старожил
  • *
  • Сообщений: 2169
  • straightedge
    • Просмотр профиля
Буду рад, если кто-то подскажет в чем прикол
Прикол в том, что всё работает логично и правильно.
http://i18.ЗАПРЕЩЁННЫЙ РЕСУРС/big/2011/0325/6d/19eaa72dd24048a6fb0587832c4b096d.gif КДЕ - УГ. Дебиан - недоось.

 

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