Чи є еквівалентний файл ".bashrc", який читають усі оболонки?


105

Є ~/.bashrc єдине місце, де можна вказати конкретні змінні середовища, псевдоніми, зміни PATHзмінної тощо?

Я запитую, бо, здається, це ~/.bashrcздається bash, тільки, але інші снаряди теж існують ...

Відповіді:


94

У файлі $HOME/.profileвикористовується ряд оболонок, включаючи bash, sh, dash та, можливо, інші.

З сторінки "bash man":

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

csh і tcsh явно не дивляться на це, ~/.profileале ці оболонки начебто застаріли.


7
Zsh за замовчуванням не читає .profile. Тому я видалив попередню відповідь, вказуючи це. Zsh зчитує .profile лише тоді, коли на нього викликається символічне посилання sh.
fschmitt

10
tcsh все ще популярний в деяких середовищах.
Maciej Piechotka

1
fschmitt: спасибі за виправлення; фіксований. Мацей П'єхотка: Я не сумніваюся, що це правда; однак також можна (хоча і складно) робити * rc-скрипти, які імпортують окремі інші rc-скрипти на основі оболонки, під якою вони працюють.
msw

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). Zsh працює ~/.zprofileзамість цього, а Csh і tcsh запускаються ~/.login.

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

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

Дивіться також:
Різниця між .bashrc і .bash_profile
Які файли налаштування слід використовувати для налаштування змінних середовища з bash?
Zsh не потрапляє ~ / .profile


Не забувайте, zsh також має .zloginдодаток до .zprofileякого працює після .zshrc (але лише для оболонок для входу). Дивіться поширені питання
ZSH

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)

Якщо у вас є кореневий доступ до системи, інший спосіб - це налаштувати 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записи.

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


14

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

У csh, який ви використовуєте setenvв bash, ви використовуєте exportдля їх визначення.

У будь-якому випадку ви можете написати власний конфігураційний файл і включити його sourceдо точок файлів оболонок.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.