.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

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

user3584014
источник
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
SD.
источник
Если на вашем терминале не запущена оболочка входа в систему (которая в Ubuntu по умолчанию отсутствует), ~/.bash_profileона не будет прочитана (и в Ubuntu она не существует по умолчанию)
muru
5

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

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

evan_b
источник
Это было причиной!
Мюля
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.

Фуркан Али
источник
Какой графический интерфейс вы имеете в виду? гном или единство
Ник Ванавит