Чи є еквівалентний файл ".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.