it-swarm.com.de

Gibt es eine ".bashrc" -äquivalente Datei, die von allen Shells gelesen wird?

Ist ~/.bashrc der einzige Ort, an dem benutzerspezifische Umgebungsvariablen, Aliase, Änderungen an der Variablen PATH usw. angegeben werden können?

Ich frage, weil es scheint, dass ~/.bashrc scheint nur bash- zu sein, aber es gibt auch andere Muscheln…

115
Stefan

Die Datei $HOME/.profile wird von einer Reihe von Shells verwendet, einschließlich Bash, Sh, Dash und möglicherweise anderen.

Von der Bash-Manpage:

Wenn bash als interaktive Anmelde-Shell aufgerufen wird, ... werden zuerst Befehle aus der Datei/etc/profile gelesen und ausgeführt, sofern diese Datei vorhanden ist. Nach dem Lesen dieser Datei sucht sie in dieser Reihenfolge nach ~/.bash_profile, ~/.bash_login und ~/.profile und liest und führt Befehle von der ersten vorhandenen und lesbaren aus.

csh und tcsh schauen explizit nicht auf ~/.profile aber diese Muscheln sind irgendwie antiquiert.

97
msw

~/.profile Ist der richtige Ort für Umgebungsvariablendefinitionen und für nicht grafische Programme, die Sie beim Anmelden ausführen möchten (z. B. ssh-agent, screen -m). Es wird von Ihrer Login-Shell ausgeführt, wenn es sich um eine Shell im Bourne-Stil handelt (sh, ksh, bash). Zsh führt stattdessen ~/.zprofile Und Csh und tcsh ~/.login Aus.

Wenn Sie sich unter einem X-Display-Manager (xdm, gdm, kdm, ...) anmelden, hängt es davon ab, wie Ihr Display-Manager und möglicherweise die Desktop-Umgebung von Ihrer Distribution konfiguriert wurden, ob ~/.profile Ausgeführt wird. Wenn Sie sich unter einer "benutzerdefinierten Sitzung" anmelden, wird normalerweise ~/.xsession Ausgeführt.

~/.bashrc Ist der richtige Ort für Bash-spezifische Einstellungen wie Aliase, Funktionen, Shell-Optionen und Eingabeaufforderungen. Wie der Name schon sagt, ist es spezifisch für Bash; csh hat ~/.cshrc, ksh hat ~/.kshrc und zsh hat <drumroll> ~/.zshrc.

Siehe auch:

Es gibt keine gemeinsame Datei, aber Sie können jede Shell aus einer gemeinsamen Datei lesen lassen.

  1. bash liest aus .bash_profile oder .bashrc
  2. zsh liest aus .zprofile und.zshrc
  3. ksh liest aus .profile oder $ENV

Also hier ist was ich tue:

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

Wenn Sie Root-Zugriff auf das System haben, können Sie auch pam_env.

Du kannst Geben

session optional pam_env.so user_envfile=.env

in der relevanten /etc/pam.d Datei (z. B. /etc/pam.d/common-session auf Debian), und wenn sich der Benutzer anmeldet, liest PAM Umgebungsvariablen aus ~/.env.

Beachten Sie, dass pam_env unterstützt grundsätzlich nur VAR=value Einträge.

Mehr Info:

23
Mikel

Es gibt keine Umgebungskonfigurationsdatei für verschiedene Shells, da diese sogar Shell-spezifisch ist.

In csh verwenden Sie setenv in bash verwenden Sie export, um sie zu definieren.

Auf jeden Fall können Sie Ihre eigene Konfigurationsdatei schreiben und diese mit source in die Punktedateien Ihrer Shells aufnehmen.

15
echox