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.
Zsh liest standardmäßig nicht .profile. Aus diesem Grund habe ich meine vorherige Antwort gelöscht. Zsh liest .profile nur, wenn es von einem symbolischen Link namens sh aufgerufen wird.
Fschmitt
10
tcsh ist in einigen Umgebungen immer noch beliebt.
Maciej Piechotka
1
fschmitt: danke für die korrektur; Fest. Maciej Piechotka: Ich habe keinen Zweifel, dass das stimmt. Es ist jedoch auch möglich (wenn auch kompliziert), * rc-Skripte zu erstellen, die bestimmte andere rc-Skripte basierend auf der Shell, unter der sie ausgeführt werden, importieren.
msw
1
Damit dies funktioniert, müssen Benutzer sicherstellen, dass jede Shell eine Anmeldeshell ist. Gehen Sie in Gnome Terminal zum Beispiel zu Profil -> Titel und Befehl und aktivieren Sie Run command as a login shell. Sie müssen es auch entfernen ~/.bash_profileoder als Quelle festlegen ~/.profile.
Mikel
@fschmitt Du kannst auch $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.
Benjamin R
56
~/.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.
Vergessen Sie nicht , zsh hat auch .zloginzusätzlich zu .zprofileder läuft nach.zshrc (aber nur für Login - Shells). Siehe die ZSH FAQ
Geeb
21
Es gibt keine gemeinsame Datei, aber Sie können jede Shell aus einer gemeinsamen Datei lesen lassen.
bashliest aus .bash_profileoder.bashrc
zshliest aus .zprofileund.zshrc
kshliest aus .profileoder$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 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 .
Run command as a login shell
. Sie müssen es auch entfernen~/.bash_profile
oder als Quelle festlegen~/.profile
.$HOME/.profile
aus deinem Zsh heraus schöpfen.zshrc
. Ich neige dazu, alle meine tragbaren Shell-Dinge unterzubringen,.profile
und dann kann ich sie in jeder Umgebung teilen, zwischen denen ich vielleicht hüpfen möchte.~/.profile
ist der richtige Ort für die Umgebungsvariable Definitionen und für nicht-grafische Programme , die Sie , wenn Sie sich in (zB ausgeführt werden sollenssh-agent
,screen -m
). Es wird von Ihrer Login-Shell ausgeführt, wenn es sich um eine Bourne-Shell handelt (sh, ksh, bash). Zsh wird~/.zprofile
stattdessen ausgeführt und Csh und tcsh werden ausgeführt~/.login
.Wenn Sie sich unter einem X-Display-Manager anmelden (xdm, gdm, kdm, ...),
~/.profile
hä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
.~/.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:
Unterschied zwischen .bashrc und .bash_profile
Welche Setup-Dateien sollten zum Einrichten von Umgebungsvariablen mit bash verwendet werden?
Zsh trifft nicht ~ / .profile
quelle
.zlogin
zusätzlich zu.zprofile
der läuft nach.zshrc
(aber nur für Login - Shells). Siehe die ZSH FAQEs gibt keine gemeinsame Datei, aber Sie können jede Shell aus einer gemeinsamen Datei lesen lassen.
bash
liest aus.bash_profile
oder.bashrc
zsh
liest aus.zprofile
und.zshrc
ksh
liest aus.profile
oder$ENV
Also hier ist was ich tue:
~/.env
~/.shrc
~/.bashrc
~/.zshenv
~/.zshrc
~/.profile
~/.bash_profile
~/.zlogin
~/.zprofile
Wenn Sie Root-Zugriff auf das System haben, können Sie es auch einrichten
pam_env
.Du kannst Geben
in der entsprechenden
/etc/pam.d
Datei (zB/etc/pam.d/common-session
unter Debian) und dann, wenn sich der Benutzer anmeldet,PAM
werden Umgebungsvariablen von gelesen~/.env
.Beachten Sie, dass
pam_env
grundsätzlich nurVAR=value
Einträge unterstützt werden .Mehr Info:
quelle
Es gibt keine Umgebungskonfigurationsdatei für verschiedene Shells, da die Definition der Shells sogar spezifisch ist.
In csh verwenden Sie
setenv
in bashexport
, um sie zu definieren.Wie auch immer, Sie könnten Ihre eigene Konfigurationsdatei schreiben und diese
source
in die Punktedateien Ihrer Shells aufnehmen.quelle