.bashrc не виконується при відкритті нового терміналу


84

Код в .bashrc не виконується, коли я відкриваю нове вікно терміналу в Ubuntu 12.04. Я помітив це під час створення файлу .bash_aliases. Псевдоніми не з’являлися, коли я відкрив новий термінал. Однак, коли я source .bashrcнабираю псевдоніми, вони з'являлися.

.bashrc слід запускати кожного разу, коли я відкриваю нове вікно терміналу, правильно?

Як мені це зробити?


Спробуйте .profile замість цього.
— jippie

4
@jippie Ні, .profileчитається під час входу, а не під час відкриття нового терміналу, якщо десь є неправильна конфігурація. Селах: ти щось змінив із конфігурації за замовчуванням? Будь ласка, запустіть ps -o command $$ $PPIDу терміналі і скопіюйте вставку.
— Жиль

1
Просто для впевненості в тому, що ви кладете .bashrcв домашню папку, правда?
— Jjed

Можливо, хочу перевірити echo $SHELL. Це сталося зі мною, і оболонка була / bin / sh замість bash. Виправити це в / etc / passwd та його запущеному .bashrc.
— Джо Флінн

Відповіді:


128

Це не обов'язково виконувати; у верхній частині стандарту .bashrc - це коментар:

# ~/.bashrc: executed by bash(1) for non-login shells.
# see /usr/share/doc/bash/examples/startup-files (in the package bash-doc)
# for examples

Я вважаю, є можливість запустити bash-термінал як оболонку входу чи ні. У Ubuntu gnome-термінал зазвичай не працює як оболонка входу, тому .bashrc слід запускати безпосередньо.

Для входу в систему оболонок (наприклад , віртуальні термінали), як правило , файл ~/.profileзапускається, якщо у вас немає ні ~/.bash_profileабо ~/.bash_login, але їх там немає за замовчуванням. За замовчуванням Ubuntu використовує лише .profile.

Стандарт ~/.profileмає це в цьому:

if [ -n "$BASH_VERSION" ]; then
    # include .bashrc if it exists
    if [ -f "$HOME/.bashrc" ]; then
        . "$HOME/.bashrc"
    fi
fi

Це запускається .bashrc, якщо він доступний - припускаючи, що у вашому оточенні присутній $ BASH_VERSION. Ви можете перевірити це, ввівши команду echo $BASH_VERSION, і вона повинна відображати деяку інформацію про номер версії - вона не повинна бути порожньою.


4
Розуміючи ці вказівки, я зайшов у свою термінальну програму, я перейшов до редагування -> налаштування профілю -> Назва та команда -> Запустити команду як оболонку входу. Я це не перевірив. Дякую за допомогу.
— Селах

Чи можете ви уточнити, коли .profile (отже .bashrc) завантажується / читається? Здається, це робиться, коли користувачі входять у свій робочий стіл. Відповідь передбачає, що це відбувається, коли ви починаєте новий сеанс термінала / оболонки "Для оболонок входу (як віртуальні термінали), як правило, файл ~ / .profile запускається ..."
— їжак

4
Він зазвичай запускається при запуску нового входу в оболонці ( на самому ділі не на робочий стіл сесії, тому що ви можете запустити нову оболонку входу в системі з робочим столом сесії). Як я вже сказав, він працює за замовчуванням, але не, якщо ви створили ~/.bash_profileабо ~/.bash_login. Ви можете перевірити, встановивши або знявши прапорець у полі Edit -> Profile Preferences -> Title and Command -> "Run command as a login shell, і вийдіть, а потім повторно запустіть термінал. Ви можете повторити щось із .profile для тестування.
— Марті Фрід

@Selah Ваш коментар допоміг мені більше, ніж фактична відповідь;) велике спасибі за коментар!
— Алекс

Отже, якщо ви створили ~/.bash_profileабо ~/.bash_loginв своїй системі і хочете зберегти їх, але все ще хочете ~/.profileі звідти ~/.bashrcвиконуються, ви можете їх джерело з власного ~/.bash_profileабо ~/.bash_loginз рядка, що містить source "$HOME/.profile". Повертає кольоровий вихід ls також в оболонках для входу!
— таніум

26

У моєму випадку просто не було .bashrcнавантажувальних ліній.bash_profile

# include .bashrc if it exists
if [ -f "$HOME/.bashrc" ]; then
    . "$HOME/.bashrc"
fi

Я додав його вручну, і він працював з моїм свіжим логіном


3
.bash_profile? Ubuntu використовує .profileза замовчуванням, не .bash_profile.
— муру

сервер Убунту часто вже не пікап .bashrc ... вище працює так само ... кішка .bash_profile [[-s "$ HOME / .bashrc"]] && джерело "$ HOME / .bashrc" # Load за замовчуванням
— Скотт Стенсланн

Це вирішило це для мене! Я додав, pcreі здається, він замінює профіль bash замість того, щоб додавати його.
— shapiro yaacov

7

.bash_profileмістить конфігурацію для оболонки bash. Коли ви відкриваєте термінал, він спочатку зчитує та виконує команди з ~/.bash_profile. Таким чином, ви можете додати наступне в .bash_profileналаштування оболонки відповідно до bashrc.

. ~/.bashrc

Якщо у вашому терміналі не працює оболонка для входу (чого вона за замовчуванням не є в Ubuntu), ~/.bash_profileвона не буде прочитана (і вона не існує за замовчуванням в Ubuntu)
— muru

5

Якщо $BASH_VERSIONне встановлено, спробуйте скористатися chshкомандою, щоб встановити оболонку /bin/bash.

У мене була аналогічна проблема з 12.04 LTS, і виявилося, що для нового облікового запису користувача встановлено оболонку за замовчуванням /bin/sh, що і стало причиною проблеми.


Це було причиною!
— mulya

1

Кодування до коментаря в .profile

~ / .profile: виконується інтерпретатором команд для оболонок входу. 11 Цей файл не читається bash (1), якщо ~ / .bash_profile або ~ / .bash_login¬ 10 # існує

Тож ви йдете, якщо ~/.bash_profileабо ~/.bash_login exists, вони замість них побіжать~/.profile

якщо ви хочете запустити, ~/.bashrcпросто додайте рядок source ~/.bashrcуbash_profile


1
У мене виникло саме таке питання. Моє .bashrcджерело, поки я не створив .bash_profileфайл. Тому я наперед додав source ~/.bashrc рядок до свого .bash_profileфайлу.
— Лаші

0

Замість того, щоб пройти все через це, просто перейдіть Edit -> Profile Preferences -> Title and Command -> "Run a custom command instead of my shell"і в командному полі Custom напишіть bashі закрийте його. Наступного разу, коли ви відкриєте термінал, він також запустить bash автоматично.


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