Существует ли “.bashrc” эквивалентный файл, считанный всеми оболочками?

Я могу предложить фиксацию для той последней: удостоверьтесь, что огибающий переменный HISTCONTROL не указывает "ignorespace" (или "ignoreboth").

Но я чувствую Вашу боль с несколькими параллельными сессиями. Это просто не обрабатывается хорошо в ударе.

110
21.04.2016, 03:52
4 ответа

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

Из страницы справочника удара:

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

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

95
27.01.2020, 19:29
  • 1
    Zsh по умолчанию не читает .profile. Вот почему я удалил свой предыдущий ответ, заявив это. Zsh только читает .profile, когда он вызывается символьной ссылкой, названной sh. –  fschmitt 13.10.2010, 18:48
  • 2
    tcsh, все еще популярно в некоторых средах. –  Maciej Piechotka 14.10.2010, 02:01
  • 3
    fschmitt: спасибо за исправление; фиксированный. Maciej Piechotka: Я не сомневаюсь это правда; однако также возможно (хотя сложный) сделать *емкостно-резистивные сценарии, которые импортируют конкретные другие емкостно-резистивные сценарии на основе оболочки, под которой они работают. –  msw 14.10.2010, 06:27
  • 4
    Для этого способа работать, пользователи должны удостовериться, что каждая оболочка является оболочкой входа в систему. Например, в Терминале Gnome, перейдите к Профилю-> Заголовок и Команда, и включите Run command as a login shell. Также необходимо удалить ~/.bash_profile, или сделайте это источником ~/.profile. –  Mikel 26.11.2013, 22:07
  • 5
    @fschmitt можно также получить $HOME/.profile из Вашего Zsh .zshrc, также. Я склонен вставлять все свои портативные вещи оболочки .profile и затем я могу совместно использовать его вокруг любой среды, между которой я мог бы скачкообразно двинуться. –  Benjamin R 31.05.2017, 06:51

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

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

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

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

59
27.01.2020, 19:29
  • 1
    Не забывайте, что zsh также имеет .zlogin в дополнение к .zprofile который бежит .zshrc (но только для оболочек входа в систему). Посмотрите Хороший ZSH FAQ –  Geeb 23.01.2014, 16:23

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

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

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

15
27.01.2020, 19:29

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

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

Подробнее:

23
27.01.2020, 19:29

Теги

Похожие вопросы