/ etc / профиль не получен

45

В течение 11.04 я сделал новую установку моей системы. Часть этой установки должна была установить rvm , который вставляет rvm.shв /etc/profile.d/. Это не работает, поскольку /etc/profile(который загружает каждый + r в /etc/profile.d/*.sh) не загружается. Согласно документации, профиль создается только при запуске bash при входе в систему. Чтобы убедиться в этом, я вызвал bash --login, после чего rvmстало доступно.

Это работало для меня в предыдущих версиях Ubuntu без какой-либо конфигурации. То есть при новой установке 10.10 будет правильно создан профиль / .d.

Мой вопрос: есть ли что-то, что я делаю неправильно, или есть какие-то новые предположения, сделанные в Нетти, которые нарушили это? Мой текущий обходной путь - source /etc/profilein ~/.bashrc(что ужасно, так как профиль предназначен для загрузки до bashrc, но делает свое дело).

Марк
источник

Ответы:

52

По умолчанию gnome-терминал не запускает bash как оболочку входа в систему (я предполагаю, что вы имеете в виду bash, запущенный внутри gnome-терминала). Это означает, что Bash не будет читать /etc/profileили ~/.profile. Как вы правильно заметили, bash будет читать эти файлы, если запущен как оболочка для входа.

Быстрое решение вашей проблемы - настроить gnome-терминал для запуска bash в качестве оболочки входа в систему, чтобы он читал /etc/profile. Для этого вам нужно включить «Выполнить команду как оболочку входа» в терминале gnome «Настройки профиля», доступном из меню «Правка».

Я не рекомендую делать это, потому что это портит различие между ~/.profileи ~/.bashrc. В идеале ~/.profileдолжен делать вещи, которые требуются только один раз, во время входа в систему, в то время как ~/.bashrcдолжен делать вещи, которые требуются при каждом запуске bash.

У суперпользователя есть вопрос и ответ о разнице между bashrc и профилем . Читайте там для получения дополнительной информации.

Из описания вашей проблемы кажется, что скрипт rvm должен быть загружен только один раз, во время входа в систему. Насколько я знаю, Ubuntu настроил графический логин для чтения /etc/profile/и ~/.profile. Это означает, что после выхода и однократного входа скрипт rvm должен быть активным. Если это все еще не работает, то, возможно, скрипт rvm должен быть загружен для каждого сеанса bash. Если это так, то bashrcэто более подходящее место для сценария.

lesmana
источник
Установка команды запуска в качестве оболочки входа действительно загрузилась /etc/profile(и, следовательно, .d). Спасибо за объяснение - кажется, что это требует продолжения с народом rvm.
Марк
7
Ubuntu 11.04, кажется, не читает /etc/profileи ~/.profileво время входа в систему. Это странно, потому что это всегда работало со старыми версиями. Я думаю, что это не решение, а обходной путь.
Лука
2
@lesmana Можно ли как-нибудь включить «Выполнить команду как оболочку входа» из CLI вместо GUI? Я sshed на удаленный сервер и не могу переслать X локально.
Васим
5

Однако существует файл, /etc/bash.bashrc который читается gnome-терминал и является «общесистемным файлом .bashrc для интерактивных оболочек bash (1)».

Мой вызов функции rvm [[ -s "$HOME/.rvm/scripts/rvm" ]] && . "$HOME/.rvm/scripts/rvm", пошел туда, и прекрасно работает для пары пользователей в этой системе.

Дмитрий
источник
gnome-терминал ничего подобного не делает. gnome-терминал запускает bash (или какую-либо другую оболочку входа в систему в базе данных passwd) в интерактивном режиме, и bash запускает интерактивное чтение /etc/bash.bashrc. Ну, по крайней мере, на Debian / Ubuntu. Bash обычно не читает общесистемный bashrc; Debian исправил это, чтобы сделать это.
Гейра
@geirha: dmitri @ Eos: ~ $ uname -a Linux Eos 3.0.0-16-generic # 29-Ubuntu SMP Вт 14 февраля 12:48:51 UTC 2012 x86_64 x86_64 x86_64 GNU / Linux dmitri @ Eos: ~ $ cat / etc / bash.bashrc # Общесистемный файл .bashrc для интерактивных оболочек bash (1). # Чтобы включить настройки / команды в этом файле для оболочек входа в систему, # этот файл должен быть найден в / etc / profile. # Если вы не работаете в интерактивном режиме, ничего не делайте [-z "$ PS1"] && return .....
Дмитрий
2
Да, очевидно, gnome-терминал вызывает bash для чтения этого файла: если ваша оболочка ksh, то gnome-терминал не будет читать этот файл, не так ли? Могу ли я предложить поискать слово «педант» в словаре, прежде чем продолжать использовать провокационные фразы типа «ничего не делает».
Дмитрий
4

Установка RVM как многопользовательского требует от пользователя выполнения этой команды:

(потому что Ubuntu не использует /etc/profile.d при входе в систему)

echo '[[ -s "/etc/profile.d/rvm.sh" ]] && . "/etc/profile.d/rvm.sh" # Load RVM function' >> ~/.bashrc
user50486
источник
3
Ubuntu делает исходные файлы во /etc/profile.d/время входа в систему, потому что по умолчанию выполняется /etc/profileциклический просмотр и источники файлов /etc/profile.d/. Однако, если он rvm.shсодержит код для интерактивных оболочек, таких как функции или псевдонимы, их получение /etc/profileбессмысленно. Настройка для интерактивных сеансов Bash должна быть в .bashrc.
гейра
0

если у вас есть ZSH или OH-MY-ZSH, ваш профиль будет / etc / zprofile

Хади Фарно
источник
0

Я действительно нашел для тех, кто не любит полностью перезагружать свои коробки, если это абсолютно необходимо следующее ...

Вам не нужно перезагружать всю машину, чтобы изменения /etc/profileвступили в силу. Все, что вам нужно, это перезапустить графический интерфейс XWindows Desktop, чтобы он перечитывал настройки (как если бы он запускался как часть общесистемного перезапуска).

Для меня я использую xUbuntu, который использует LightDM, но вы можете использовать любой исполняемый файл, который называется вашим текущим рабочим столом.

Во-первых, вы не можете использовать эмулятор терминала из самого графического интерфейса рабочего стола, чтобы сделать это (по крайней мере, с LightDM), вам нужно использовать SSH или дополнительную консоль (если вы удерживаете Ctrl + Alt и нажимаете клавишу F или цифровую клавишу Вы должны отойти от вашего графического рабочего стола или экрана в обычное окно терминала). Я также предлагаю вам закрыть все удаленные рабочие столы, такие как VNC, если вы используете SSH (очевидно, SSH может быть подключен, вы просто не хотите, чтобы открытое окно VNC опрашивало отображение 0, когда оно пытается перезапуститься, поскольку это может привести к зависанию перезапуска, пока он ждет, когда вы прекратите сеанс VNC).

Я делаю это все время с SSH, и это очень спасает жизнь, особенно когда вы физически не находитесь на своей машине и не хотите ждать полного перезапуска и повторного подключения :-D

Теперь легко разобраться во «вторичном» терминале или проблеме SSH: (Да, это убьет ваш текущий сеанс, убедитесь, что вы не возражаете, сохраните все открытые документы или работу)

sudo service lightdm restart

подождите минуту, так как он убивает рабочий стол, а затем запускает его снова (это может занять несколько хороших секунд, поскольку все останавливается, а затем выполняется снова при запуске)

Вот и все, теперь, когда вы возвращаетесь к любой из консолей 0 или переходите к использованию VNC для повторного подключения, вас приветствует приглашение для входа в систему и вход в систему в обычном режиме, и если вы откроете эмулятор терминала и перейдете к выполнению команды, вы должны сделать это сейчас. У меня нет проблем, так как все ресурсы были получены так же, как если бы вы сделали полный перезапуск машины.

Просто помните, что если вы выполняете sudo service lightdm restart[или stop, startчто угодно] из самой среды рабочего стола, используя эмулятор терминала, команда просто зависнет там, и, похоже, ничего не происходит. Это связано с тем, что в данный момент вы используете эту консоль (он же дисплей) 0, и поэтому она не может полностью выключиться и вернуться обратно, поскольку ожидает, пока рабочий стол не будет использоваться, прежде чем он выполнит команду.

Последнее примечание: я не пытался выполнить перезапуск среды из рабочего стола в эмуляторе терминала, а затем переключиться на другую консоль, которая может затем перезапустить ее, но если вы уже собираетесь переключать консоль, то почему бы просто не выполнить команду оттуда как и должно быть в любом случае?

пария
источник
-4

echo ". .profile" >> ~ / .bashrc

А затем откройте другое окно. Я думаю, что это легкий подход.

Крис
источник
1
Поскольку .profileисточники по умолчанию .bashrc, это приведет к циклу для большинства пользователей.
Муру