.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.