Есть ли эквивалентный файл «.bashrc» для всех оболочек?

105

Является ли ~/.bashrc единственное место для указания пользовательских переменных среды, псевдонимов, изменений PATHпеременных и т. Д.?

Я спрашиваю, потому что кажется, что, ~/.bashrcкажется, только bash, но существуют и другие оболочки ...

Стефан
источник

Ответы:

94

Файл $HOME/.profileиспользуется рядом оболочек, включая bash, sh, dash и, возможно, другие.

Со страницы руководства bash:

Когда bash вызывается как интерактивная оболочка входа в систему, ... она сначала читает и выполняет команды из файла / etc / profile, если этот файл существует. После прочтения этого файла он ищет ~ / .bash_profile, ~ / .bash_login и ~ / .profile в указанном порядке, а также читает и выполняет команды из первой, которая существует и доступна для чтения.

csh и tcsh явно не смотрят, ~/.profileно эти оболочки вроде устарели.

MSW
источник
7
Zsh по умолчанию не читает .profile. Вот почему я удалил свой предыдущий ответ с указанием этого. Zsh читает .profile только тогда, когда он вызывается символической ссылкой с именем sh.
fschmitt
10
tcsh все еще популярен в некоторых средах.
Maciej Piechotka
1
fschmitt: спасибо за исправление; исправлено. Мацей Пехотка: Я не сомневаюсь, что это правда; однако также возможно (хотя и сложно) создавать сценарии * rc, которые импортируют определенные другие сценарии rc на основе оболочки, в которой они работают.
MSS
1
Чтобы этот способ работал, пользователи должны убедиться, что каждая оболочка является оболочкой входа в систему. Например, в Терминале Gnome перейдите в Профиль -> Заголовок и Команда и включите Run command as a login shell. Вы также должны удалить ~/.bash_profileили сделать его источником ~/.profile.
Микель
@fschmitt Вы также можете найти источник $HOME/.profileвнутри Zsh .zshrc. Я имею тенденцию помещать все свои портативные вещи оболочки, .profileи затем я могу разделить это вокруг любой среды, между которой я мог бы прыгать
Бенджамин Р
56

~/.profileэто правильное место для определения переменных среды и неграфических программ, которые вы хотите запустить при входе в систему (например ssh-agent, screen -m). Он выполняется вашей оболочкой входа в систему, если это оболочка в стиле Борна (sh, ksh, bash). ~/.zprofileВместо этого запускается Zsh , а Csh и tcsh запускаются ~/.login.

Если вы войдете в систему с помощью диспетчера отображения X (xdm, gdm, kdm, ...), будет ли ~/.profileвыполняться запуск, зависит от того, как ваш диспетчер отображения и, возможно, среда рабочего стола были настроены вашим дистрибутивом. Если вы входите в систему под «пользовательским сеансом», он обычно выполняется ~/.xsession.

~/.bashrcэто правильное место для настроек, относящихся к bash, таких как псевдонимы, функции, параметры оболочки и приглашения. Как видно из названия, это характерно для bash; csh имеет ~/.cshrc, ksh имеет ~/.kshrc, и zsh имеет <drumroll> ~/.zshrc.

См. Также:
Разница между .bashrc и .bash_profile
Какие установочные файлы следует использовать для настройки переменных среды с помощью bash?
Зш не попал ~ / .профиль

жилль
источник
Не забывайте, что zsh также имеет .zloginпомимо того, .zprofileчто запускается после .zshrc (но только для оболочек входа в систему). Смотрите ZSH FAQ
Geeb
21

Нет общего файла, но вы можете сделать так, чтобы каждая оболочка читала из общего файла.

  1. bashчитает из .bash_profileили.bashrc
  2. zshчитает .zprofile и .zshrc
  3. kshчитает из .profileили$ENV

Итак, вот что я делаю:

~/.env

# Put environment variables here, e.g.
PATH=$PATH:$HOME/bin

~/.shrc

test -f "$HOME/.env" && . "$HOME/.env"

# Put interactive shell setup here, e.g.
alias ll='ls -l'
PS1='$PWD$ '
set -o emacs

~/.bashrc

test -f ~/.shrc && source ~/.shrc

# Put any bash-specific settings here, e.g.
HISTFILE=~/.bash_history
shopt -s extglob
IGNOREEOF=yes

~/.zshenv

# Put any zsh-specific settings for non-interactive and interactive sessions, e.g.
setopt braceexpand
setopt promptsubst
setopt shwordsplit

~/.zshrc

test -f ~/.shrc && source ~/.shrc

# Put any zsh-specific interactive settings here, e.g.
HISTFILE=~/.zsh_history
setopt ignoreeof

~/.profile

# Interactive sub-shells source .env, unless this is bash or zsh,
# because they already sourced .env in .bashrc or .zshrc.
if test -z "$BASH_VERSION" -a -z "$ZSH_VERSION" || test -n "$BASH_VERSION" -a \( "${BASH##*/}" = "sh" \)
then
    test -f "$HOME"/.env && . "$HOME"/.env
fi

# The name is confusing, but $ENV is ksh's config file for interactive sessions,
# so it's equivalent to .bashrc or .zshrc.
# Putting this here makes running an interactive ksh from any login shell work.
test -f "$HOME"/.shrc && export ENV="$HOME"/.shrc

# Put any login shell specific commands here, e.g.
ssh-add
stty -ixon

~/.bash_profile

source ~/.bashrc
source ~/.profile

~/.zlogin

# zsh sources .zshrc automatically, only need to source .profile
source ~/.profile

~/.zprofile

(empty)

Если у вас есть root-доступ к системе, другой способ - настроить pam_env.

Вы можете положить

session optional pam_env.so user_envfile=.env

в соответствующем /etc/pam.dфайле (например, /etc/pam.d/common-sessionв Debian), а затем, когда пользователь войдет в систему, PAMбудет считывать переменные среды ~/.env.

Обратите внимание, что в pam_envосновном поддерживаются только VAR=valueзаписи.

Больше информации:

Mikel
источник
14

Не существует такого понятия, как файл конфигурации среды для различных оболочек, потому что его спецификация оболочки зависит от того, как они определены.

В csh вы используете setenvв bash вы используете exportдля их определения.

В любом случае вы можете написать свой собственный конфигурационный файл и включить его sourceв файлы точек ваших оболочек.

echox
источник