it-swarm-ru.tech

Есть ли ".bashrc" эквивалентный файл, прочитанный всеми оболочками?

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

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

115
Stefan

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

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

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

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

97
msw

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

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

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

Смотрите также:

64
Gilles 'SO- stop being evil'

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

  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 записи.

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

23
Mikel

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

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

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

15
echox