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

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

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

Как мне сделать так, чтобы это произошло?

Это не обязательно выполняется; в верхней части standard .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-terminal обычно не запускается как оболочка входа в систему, поэтому .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"    fifi

Это запускает .bashrc, если он доступен - при условии, что $BASH_VERSION присутствует в вашей среде. Вы можете проверить это, введя команду echo $BASH_VERSION, и он должен отображать некоторую информацию о номере версии - он не должен быть пустым.

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

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

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

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

. ~/.bashrc

Если $BASH_VERSION не установлен, попробуйте использовать chsh команда для настройки вашей оболочки на /bin/bash.

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

Согласно комментарию в .profile

# ~/.profile: executed by the command interpreter for login shells.# This file is not read by bash(1), if ~/.bash_profile or ~/.bash_login# exists.

Итак, вот так вы идете; если ~/.bash_profile или ~/.bash_login существует, они будут запущены вместо ~/.profile.

Если ты хочешь убежать ~/.bashrc просто добавьте строку source ~/.bashrc в bash_profile.

Для меня это было довольно просто. Я установил mssqltools, и каким-то образом он создал файл bash_profile в каталоге $HOME. Как bash_profile проходит перед bashrc забирается, если у вас нет source команда в bash_profile, bashrc не убежит.

Есть два способа решить эту проблему: либо удалить bash_profile или если вы используете bash_profile, просто добавьте следующую строку в любом месте файла

source ~/.bashrc

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

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

Вместо этого попробуйте .profile.

Просто чтобы быть уверенным, вы помещаете .bashrc в свою домашнюю папку, верно?

это случилось со мной, потому что я случайно запустил $ rm -r ~

В моем случае удаление неиспользуемого, но существующего файла $HOME/.bash_profile сработало.