/ тощо / профіль не отримується


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/profileв ~/.bashrc(що жахливо, оскільки профіль мається на увазі перед Bashrc, але це робить трюк).

Відповіді:


52

За замовчуванням gnome-terminal не запускає bash як оболонку входу (я припускаю, ви маєте на увазі, що bash почався всередині gnome-терміналу). Це означає, що баш не читатиме /etc/profileабо ~/.profile. Як ви правильно зауважили, bash буде читати ці файли, якщо їх запустити як оболонку входу.

Швидке виправлення вашої проблеми полягає в тому, щоб налаштувати gnome-terminal для запуску bash як оболонки для входу, щоб він прочитав /etc/profile. Для цього вам потрібно включити "Запустити команду як оболонку входу" в gnome-терміналі "Налаштування профілю", доступному в меню Правка.

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

Є питання і відповідь у суперпедератора, який говорить про різницю між bashrc і профілем . Прочитайте там для отримання додаткової інформації.

З опису вашої проблеми випливає, що сценарій rvm потрібно завантажувати лише один раз під час входу в систему. Наскільки я знаю, Ubuntu налаштував графічний логін для читання /etc/profile/та ~/.profile. Це означає, що після виходу з системи та входу в систему один раз сценарій rvm повинен бути активним. Якщо вона все ще не працює, можливо, слід завантажувати rvm-скрипт для кожного bash-сеансу. Якщо це так, то bashrcє більш підходящим місцем для сценарію.


Встановлення команди "запустити команду як оболонку входу" дійсно завантажувало /etc/profile(і, таким чином, .d). Дякую за пояснення - схоже, що для цього потрібні подальші дії з фольклорним файлом.
Марк

7
Ubuntu 11.04, здається, не читає /etc/profileі ~/.profileпід час входу. Це дивно, оскільки він завжди працював із старими версіями. Я думаю, це не рішення, а обхід.
Лука

2
@lesmana Чи є спосіб я можу включити "Запустити команду як оболонку входу" з CLI замість GUI? Я перекинувся на віддалений сервер і не можу передати X локально.
Waseem

5

Однак є файл, /etc/bash.bashrc який зчитується gnome-terminal і є "загальносистемним .bashrc-файлом для інтерактивних оболонок bash (1)".

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


gnome-terminal нічого подібного не робить. gnome-terminal запускає bash (або все, що встановлено для вашої оболонки для входу в базу даних passwd) в інтерактивному режимі, і bash, запущений в інтерактивному режимі, читає /etc/bash.bashrc. Ну, принаймні, на Debian / Ubuntu. Bash зазвичай не читає системний bashrc; debian це зафіксував для цього.
geirha

@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-terminal викликає bash, щоб прочитати цей файл: якщо ваша оболонка ksh, то gnome-terminal не прочитав би цей файл, чи не так? Я можу запропонувати шукати слово "педант" у словнику, перш ніж продовжувати використовувати провокаційні фрази на кшталт "нічого подібного не робить".
Дмитро

4

Встановлення RVM як багатокористувача вимагає від користувача виконання цієї команди:

(оскільки Ubuntu не використовує /etc/profile.d при вході)

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

3
Ubuntu робить джерело файлів /etc/profile.d/під час входу, тому що за замовчуванням /etc/profileпроходить циклічні файли та файли в них /etc/profile.d/. Однак, якщо він rvm.shмістить код для інтерактивних оболонок, таких як функції або псевдоніми, їх отримання джерелом /etc/profileбезглуздо. Установка для інтерактивних сеансів баш повинна бути в .bashrc.
geirha


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

ехо ". .профіль" >> ~ / .bashrc

А потім відкрийте ще одне вікно. Я думаю, що це простий підхід.


1
Оскільки .profileджерела за замовчуванням .bashrc, це призведе до циклу для більшості користувачів.
муру
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.