Автор Тема: Ошибка экспорта переменной окружения $SHELL для root  (Прочитано 3348 раз)

Оффлайн zah

  • Давно тут
  • **
  • Сообщений: 128
  • ^_^
Всем привет!

Почему может быть так?

$ su -
Password:
-bash-3.2# echo $SHELL
/bin/bash
-bash-3.2# export SHELL=/bin/zsh
-bash-3.2# echo $SHELL
/bin/zsh
-bash-3.2# logout
$ su -
Password:
-bash-3.2# echo $SHELL
/bin/bash

Оффлайн rabochyITs

  • Давно тут
  • **
  • Сообщений: 774
  • Евгений
Может через usermod -s, или руками добавить в /etc/passwd ?
cat /etc/passwd | grep root
cat /etc/shells

Оффлайн Skull

  • Глобальный модератор
  • *****
  • Сообщений: 18 738
    • Домашняя страница
    • Email
Всем привет!

Почему может быть так?

$ su -
Password:
-bash-3.2# echo $SHELL
/bin/bash
-bash-3.2# export SHELL=/bin/zsh
-bash-3.2# echo $SHELL
/bin/zsh
-bash-3.2# logout
$ su -
Password:
-bash-3.2# echo $SHELL
/bin/bash
Поменять переменную и завершить сеанс — логично приводит к восстановлению окружения родительского шелла.
Вот если бы открыли новый...
Андрей Черепанов (cas@)

Оффлайн andrew_b

  • Давно тут
  • **
  • Сообщений: 477
Почему может быть так?
Дочерний процесс в принципе не может повлиять на родительский. Это азы, в общем-то.

Оффлайн zah

  • Давно тут
  • **
  • Сообщений: 128
  • ^_^
Всем привет!

Почему может быть так?

$ su -
Password:
-bash-3.2# echo $SHELL
/bin/bash
-bash-3.2# export SHELL=/bin/zsh
-bash-3.2# echo $SHELL
/bin/zsh
-bash-3.2# logout
$ su -
Password:
-bash-3.2# echo $SHELL
/bin/bash
Поменять переменную и завершить сеанс — логично приводит к восстановлению окружения родительского шелла.
Вот если бы открыли новый...

Да, но я же делаю export переменной. В общем изначально `export SHELL=/bin/zsh отработала и переменная окружения изменилась на zsh. Затем, через какое-то время сделал `export SHELL=/bin/bash тоже всё изменилось норм. А вот снова изменить переменную окружения на zsh приводит к тому что завершая сеанс переменная не сохраняется как экспортированная. Вопрос в общем-то как мне изменить переменную окружения $SHELL с учетом что export не отрабатывает?

Оффлайн zah

  • Давно тут
  • **
  • Сообщений: 128
  • ^_^
Может через usermod -s, или руками добавить в /etc/passwd ?
cat /etc/passwd | grep root
cat /etc/shells

Изменил руками в /etc/passwd теперь как нужно. Спасибо!

Оффлайн zah

  • Давно тут
  • **
  • Сообщений: 128
  • ^_^
Почему может быть так?
Дочерний процесс в принципе не может повлиять на родительский. Это азы, в общем-то.

Что вы имеете ввиду? Я же делаю экспорт переменной окружения.

Оффлайн Skull

  • Глобальный модератор
  • *****
  • Сообщений: 18 738
    • Домашняя страница
    • Email
Почему может быть так?
Дочерний процесс в принципе не может повлиять на родительский. Это азы, в общем-то.

Что вы имеете ввиду? Я же делаю экспорт переменной окружения.
Вы делаете только в текущем сеансе.
Андрей Черепанов (cas@)

Оффлайн zah

  • Давно тут
  • **
  • Сообщений: 128
  • ^_^
Почему может быть так?
Дочерний процесс в принципе не может повлиять на родительский. Это азы, в общем-то.

Что вы имеете ввиду? Я же делаю экспорт переменной окружения.
Вы делаете только в текущем сеансе.

Понял. А как делать экспорт переменных окружения глобально через export?

Оффлайн berkut_174

  • Мастер
  • ***
  • Сообщений: 7 011
    • Email
А как делать экспорт переменных окружения глобально через export?
/etc/bashrc.d/
« Последнее редактирование: 20.12.2018 13:26:27 от berkut_174 »
Сноси Винду, переходи на Линукс ! :)

Оффлайн andrew_b

  • Давно тут
  • **
  • Сообщений: 477
Я же делаю экспорт переменной окружения.
Смотрите что вы делаете.
У вас есть процесс shell.
$ su -
Password:
Из него вы запустили ещё один процесс shell. Он является дочерним (child) по отношению к тому (родительскому, parent), из которого вы его запустили.
-bash-3.2# echo $SHELL
/bin/bash
Дочерний процесс получил копию всего родительского окружения.
-bash-3.2# export SHELL=/bin/zsh
-bash-3.2# echo $SHELL
/bin/zsh
Хотя вы и сделали export, но этот export приведет только к тому, что новая переменная будет доступна текущему процессу и всем его детям. Наверху, в родительском процессе, ничего не изменится.
-bash-3.2# logoutВернулись в родительский процесс, дочерний завершился, его окружение уничтожилось.
$ su -
Password:
-bash-3.2# echo $SHELL
/bin/bash
Вы запустили новый дочерний процесс. Всё началось сначала.