/ etc / profile не используется

43

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

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

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

    
задан Marc 05.05.2011 в 11:22
источник

6 ответов

48

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

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

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

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

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

    
ответ дан lesmana 05.05.2011 в 13:31
источник
5

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

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

    
ответ дан Dmitri 13.02.2012 в 03:38
4

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

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

echo '[[ -s "/etc/profile.d/rvm.sh" ]] && . "/etc/profile.d/rvm.sh" # Load RVM function' >> ~/.bashrc
    
ответ дан user50486 13.03.2012 в 21:07
0

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

    
ответ дан Hadi Farnoud 25.10.2013 в 11:52
0

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

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

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

Во-первых, вы не можете использовать эмулятор терминала из самого GUI рабочего стола, чтобы сделать это (по крайней мере, не с 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 , что угодно] из самой среды рабочего стола, используя эмулятор терминала, команда будет просто висеть там, и ничего не произойдет. Это связано с тем, что в настоящее время вы используете эту консоль (aka display) 0, и поэтому она не может полностью опуститься и вернуться обратно, поскольку она ждет, пока рабочий стол не будет использоваться до запуска этой команды.

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

    
ответ дан Pariah 05.11.2014 в 16:19
-3

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

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

    
ответ дан chris 16.11.2014 в 07:28