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

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

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

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

6 ответов

Решение

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

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

Я не рекомендую делать это, потому что это портит различие между ~/.profile а также ~/.bashrc, в идеале ~/.profile should do stuff which is required only once, during login, while ~/.bashrc should do stuff which is required everytime bash is started.

There is a question and answer at superuser talking about the difference between bashrc and profile. Read there for more information.

From your problem description it seems that the rvm script needs to be loaded only once, during login. As far as I know Ubuntu has configured the graphical login to read /etc/profile/ а также ~/.profile, That means, after logging out and a logging in once, the rvm script should be active. If it still doesn't work, then perhaps the rvm script needs to be loaded for every bash session. If that is the case then bashrc is the more appropriate place for the script.

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

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

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

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

echo '[[ -s "/etc/profile.d/rvm.sh" ]] && . "/etc/profile.d/rvm.sh" # Load RVM function' >> ~/.bashrc

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

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

Вам не нужно перезагружать всю машину, чтобы изменения /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, и поэтому она не может полностью выключиться и вернуться обратно, поскольку ожидает, пока рабочий стол не будет использоваться, прежде чем он выполнит команду.

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

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

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

Другие вопросы по тегам