.bashrc не выполняется при открытии нового терминала


84

Код в .bashrc не выполняется, когда я открываю новое окно терминала в Ubuntu 12.04. Я заметил это при создании файла .bash_aliases. Псевдонимы не появлялись, когда я открывал новый терминал. Однако, когда я source .bashrcпечатаю, псевдонимы действительно появляются.

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

Как мне это сделать?


Попробуйте вместо этого .profile.
Джиппи

4
@jippie Нет, .profileчитается во время входа в систему, а не при открытии нового терминала, если где-то нет неправильной конфигурации. Selah: ты изменил что-нибудь из конфигурации по умолчанию? Пожалуйста, запустите ps -o command $$ $PPIDв терминале и скопируйте и вставьте вывод.
Жиль

1
Просто чтобы убедиться, что вы положили .bashrcв свою домашнюю папку, верно?
Джед

Возможно, хочу проверить echo $SHELL. Это случилось со мной, и оболочка была / bin / sh вместо bash. Исправьте это в / etc / passwd и работающем .bashrc.
Джо Флинн

Ответы:


129

Это не обязательно бежать; в верхней части стандартного .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
После понимания этих инструкций я пошел в свое терминальное приложение и пошел редактировать -> настройки профиля -> Заголовок и Команда -> Выполнить команду как оболочку входа. Я не проверял это. Спасибо за помощь.
Selah

Можете ли вы уточнить, когда .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 также в оболочках входа в систему!
Tanius

26

В моем случае просто .bashrcстроки загрузчика отсутствовали в.bash_profile

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

Я добавил его вручную, и он работал с моим новым логином


3
.bash_profile? Ubuntu использует .profileпо умолчанию, а не .bash_profile.
Муру

Сервер Ubuntu часто не принимает .bashrc ... выше работает так же, как ... cat .bash_profile [[-s "$ HOME / .bashrc"]] && source "$ HOME / .bashrc" # Загрузить значение по умолчанию
Скотт Стенсланд

Это решило это для меня! Я добавил, pcreи кажется, что он переписал профиль bash вместо того, чтобы добавить его.
Шапиро Яаков

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, что и стало причиной проблемы.


Это было причиной!
Мюля

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файл.
Lashae

0

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


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