it-swarm-eu.dev

Existuje ".bashrc" ekvivalentní soubor přečtený všemi skořápkami?

Je ~/.bashrc jediné místo pro specifikaci proměnných prostředí specifických pro uživatele, aliasy, úpravy proměnné PATH atd.?

Ptám se, protože se zdá, že ~/.bashrc se zdá být bash-, ale existují i ​​jiné náboje ...

115
Stefan

Soubor $HOME/.profile je používán množstvím granátů, včetně bash, sh, dash a případně dalších.

Ze stránky bash man:

Když je bash vyvolán jako interaktivní přihlašovací schránka, ... nejprve přečte a provede příkazy ze souboru/etc/profile, pokud tento soubor existuje. Po přečtení tohoto souboru hledá ~/.bash_profile, ~/.bash_login a ~/.profile v tomto pořadí a přečte a provede příkazy z prvního, který existuje a je čitelný.

csh a tcsh se výslovně nedívají na ~/.profile ale ty skořápky jsou docela zastaralé.

97
msw

~/.profile je tím pravým místem pro definice proměnných prostředí a pro negrafické programy, které chcete spustit při přihlášení (např. ssh-agent, screen -m). Provádí se přihlašovacím Shellem, pokud se jedná o Bourne-style Shell (sh, ksh, bash). Zsh běží ~/.zprofile místo toho a Csh a tcsh spustit ~/.login.

Pokud se přihlásíte pod správcem zobrazení X (xdm, gdm, kdm, ...), zda ~/.profile je spuštěno závisí na tom, jak vaše distribuce nakonfigurovala správce zobrazení a možná i prostředí pracovní plochy. Pokud se přihlásíte pod „vlastní relací“, obvykle se spustí ~/.xsession.

~/.bashrc je tím pravým místem pro nastavení specifická pro bash, jako jsou aliasy, funkce, možnosti prostředí a výzvy. Jak název napovídá, je specifický pro bash; csh má ~/.cshrc, ksh má ~/.kshrc a zsh má <drumroll> ~/.zshrc.

Viz také:

Neexistuje žádný společný soubor, ale můžete si nechat každý Shell číst ze společného souboru.

  1. bash přečte z .bash_profile nebo .bashrc
  2. zsh přečte z .zprofile a.zshrc
  3. ksh přečte z .profile nebo $ENV

Tady je to, co dělám:

~/.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)

Pokud máte root přístup k systému, dalším způsobem je nastavení pam_env.

Můžeš položit

session optional pam_env.so user_envfile=.env

v příslušném /etc/pam.d file (např. /etc/pam.d/common-session na Debianu) a poté, když se uživatel přihlásí, PAM přečte proměnné prostředí z ~/.env.

Všimněte si, že pam_env v podstatě podporuje pouze VAR=value záznamy.

Více informací:

23
Mikel

Neexistuje nic jako konfigurační soubor prostředí pro různé skořápky, protože jeho dokonce i Shell specifické, jak jsou definovány.

V csh použijete setenv v bash, pomocí export je definujete.

Každopádně byste mohli napsat svůj vlastní konfigurační soubor a zahrnout jej s source do dotfiles vašich mušlí.

15
echox