Antworten:
Die Datei $HOME/.profilewird von einer Reihe von Shells verwendet, darunter bash, sh, dash und möglicherweise andere.
Von der Bash-Manpage:
Wenn bash als interaktive Anmeldeshell aufgerufen wird, ... liest es zuerst Befehle aus der Datei / etc / profile und führt sie aus, falls diese Datei existiert. 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 Datei aus, die vorhanden und lesbar ist.
csh und tcsh schauen sich das explizit nicht an, ~/.profileaber diese Muscheln sind irgendwie antiquiert.
Run command as a login shell. Sie müssen es auch entfernen ~/.bash_profileoder als Quelle festlegen ~/.profile.
$HOME/.profileaus deinem Zsh heraus schöpfen .zshrc. Ich neige dazu, alle meine tragbaren Shell-Dinge unterzubringen, .profileund dann kann ich sie in jeder Umgebung teilen, zwischen denen ich vielleicht hüpfen möchte.
~/.profileist der richtige Ort für die Umgebungsvariable Definitionen und für nicht-grafische Programme , die Sie , wenn Sie sich in (zB ausgeführt werden sollen ssh-agent, screen -m). Es wird von Ihrer Login-Shell ausgeführt, wenn es sich um eine Bourne-Shell handelt (sh, ksh, bash). Zsh wird ~/.zprofilestattdessen ausgeführt und Csh und tcsh werden ausgeführt ~/.login.
Wenn Sie sich unter einem X-Display-Manager anmelden (xdm, gdm, kdm, ...), ~/.profilehängt die Ausführung davon ab, wie Ihr Display-Manager und möglicherweise die Desktop-Umgebung von Ihrer Distribution konfiguriert wurden. Wenn Sie sich unter einer "benutzerdefinierten Sitzung" anmelden, wird diese normalerweise ausgeführt ~/.xsession.
~/.bashrcist 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 ~/.kshrcund zsh hat <drumroll> ~/.zshrc.
Siehe auch:
Unterschied zwischen .bashrc und .bash_profile
Welche Setup-Dateien sollten zum Einrichten von Umgebungsvariablen mit bash verwendet werden?
Zsh trifft nicht ~ / .profile
Es gibt keine gemeinsame Datei, aber Sie können jede Shell aus einer gemeinsamen Datei lesen lassen.
bashliest aus .bash_profileoder.bashrczshliest aus .zprofile und .zshrckshliest aus .profileoder$ENVAlso 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 es auch einrichten pam_env.
Du kannst Geben
session optional pam_env.so user_envfile=.env
in der entsprechenden /etc/pam.dDatei (zB /etc/pam.d/common-sessionunter Debian) und dann, wenn sich der Benutzer anmeldet, PAMwerden Umgebungsvariablen von gelesen ~/.env.
Beachten Sie, dass pam_envgrundsätzlich nur VAR=valueEinträge unterstützt werden .
Mehr Info:
Es gibt keine Umgebungskonfigurationsdatei für verschiedene Shells, da die Definition der Shells sogar spezifisch ist.
In csh verwenden Sie setenvin bash export, um sie zu definieren.
Wie auch immer, Sie könnten Ihre eigene Konfigurationsdatei schreiben und diese sourcein die Punktedateien Ihrer Shells aufnehmen.