Bash не читає .bashrc, якщо не вводиться вручну


22

bashне буде джерелом .bashrcз інтерактивного терміналу, якщо я вручну не запускаю bashз терміналу:

$ bash

або вручну його джерело:

$ source ./.bashrc

або працює:

$ st -e bash

Ось кілька корисних результатів, які я сподіваюся:

$ echo $TERM
st-256color

$ echo $SHELL
/bin/sh

$ readlink /bin/sh
bash

$ shopt login_shell
login_shell     off

Я на CRUX Linux 3.0 і використовую dwmі st. Я намагався використовувати .bash_profileі .profileне мав успіху.

Будь-які ідеї?

Відповіді:


19

Навіщо це джерело? Ви не виконуєте правду bash:

$ echo $SHELL
/bin/sh

У більшості сучасних систем shє символьним посиланням на основну оболонку. Наприклад, на моєму Debian:

$ ls -l /bin/sh 
lrwxrwxrwx 1 root root 4 Aug  1  2012 /bin/sh -> dash

У вашому випадку shце посилання на, bashале, як пояснено в man bash:

Якщо bash викликається ім'ям sh, він намагається максимально наблизити поведінку до запуску історичних версій sh, дотримуючись стандарт POSIX. [...] Коли викликається інтерактивна оболонка з ім'ям sh, bash шукає змінну ENV, розширює її значення, якщо вона визначена, і використовує розширене значення як ім'я файлу для читання та виконання. Оскільки оболонка, на яку посилається sh, не намагається читати та виконувати команди з будь-яких інших файлів запуску , параметр --rcfile не впливає.

і

--norc
Не читайте та не виконайте системний файл ініціалізації /etc/bash.bashrc та особистий файл ініціалізації ~ / .bashrc, якщо оболонка інтерактивна. Цей параметр увімкнено за замовчуванням, якщо оболонка викликається як sh.

Отже, оскільки ваша оболонка за замовчуванням є sh, .bashrcне читається. Просто встановіть для вашої оболонки за замовчуванням баш за допомогою chsh -s /bin/bash.


Дякую. Я припускав, що це не має значення з моменту /bin/shвказування /bin/bash. Я думаю, що ця проблема виникла з того, що явно не призначив оболонку, /bin/bashколи я створив обліковий запис користувача.
поспішайте

Крім того , Debian / Ubuntu перемикається dashна /bin/shяк частина зусиль по скороченню часу запуску. Це було весело, коли мої користувачі почали запитувати, чому їх оболонка діє по-іншому.
куртм

18

У .bash_profile переконайтеся, що у вас є:

# .bash_profile

# If .bash_profile exists, bash doesn't read .profile
if [[ -f ~/.profile ]]; then
  . ~/.profile
fi

# If the shell is interactive and .bashrc exists, get the aliases and functions
if [[ $- == *i* && -f ~/.bashrc ]]; then
    . ~/.bashrc
fi

1
@terdon Ваша відповідь правильна. Моя відповідь була б справедлива лише в тому випадку, якщо він балотувався bash. Гарний улов, я пропустив це.
Jeight

Це може створити кілька головних болів, якщо ви будете бігати bashпоряд з іншою оболонкою, наприклад, ksh93яка використовується .profileза замовчуванням.
Kusalananda

Якщо ~ / .bash_profile не існує, ви можете створити його.
Пратік Сінгал

.bashrc в ОС на базі Debain, .bash_profile в CentOS / Fedora / Mac OS
Mitoxys
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.