Risposte:
Il file $HOME/.profile
viene utilizzato da un numero di shell, tra cui bash, sh, dash e possibilmente altre.
Dalla pagina man di bash:
Quando bash viene invocato come shell di login interattiva, ... prima legge ed esegue i comandi dal file / etc / profile, se quel file esiste. Dopo aver letto quel file, cerca ~ / .bash_profile, ~ / .bash_login e ~ / .profile, in quell'ordine, e legge ed esegue i comandi dal primo che esiste ed è leggibile.
csh e tcsh non guardano esplicitamente ~/.profile
ma quelle shell sono un po 'antiquate.
Run command as a login shell
. È inoltre necessario rimuovere ~/.bash_profile
o renderlo fonte ~/.profile
.
$HOME/.profile
da dentro la tua Zsh .zshrc
. Tendo a mettere tutte le mie cose portatili shell .profile
e poi posso condividerle in qualsiasi ambiente tra cui potrei saltare.
~/.profile
è il posto giusto per le definizioni di ambiente variabili e per i programmi non grafici che si desidera eseguire quando si accede (ad esempio ssh-agent
, screen -m
). Viene eseguito dalla shell di login se si tratta di una shell in stile Bourne (sh, ksh, bash). Viene eseguito ~/.zprofile
invece Zsh e Csh e tcsh vengono eseguiti ~/.login
.
Se accedi sotto un X display manager (xdm, gdm, kdm, ...), se ~/.profile
viene eseguito dipende da come il tuo display manager e forse l'ambiente desktop sono stati configurati dalla tua distribuzione. Se accedi in una "sessione personalizzata", di solito viene eseguita ~/.xsession
.
~/.bashrc
è il posto giusto per impostazioni specifiche di bash, come alias, funzioni, opzioni della shell e prompt. Come indica il nome, è specifico per bash; csh ha ~/.cshrc
, ksh ha ~/.kshrc
e zsh ha <drumroll> ~/.zshrc
.
Vedi anche:
Differenza tra .bashrc e .bash_profile
Quali file di installazione dovrebbero essere usati per impostare le variabili di ambiente con bash?
Zsh non colpisce ~ / .profile
.zlogin
in aggiunta a .zprofile
che corre dopo .zshrc
(ma solo per shell di login). Vedi le domande frequenti su ZSH
Non esiste un file comune, ma è possibile leggere ogni shell da un file comune.
bash
legge da .bash_profile
o.bashrc
zsh
legge da .zprofile
e .zshrc
ksh
legge da .profile
o$ENV
Quindi ecco cosa faccio:
~/.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)
Se si dispone dell'accesso root al sistema, è possibile configurare un altro modo pam_env
.
Puoi mettere
session optional pam_env.so user_envfile=.env
nel /etc/pam.d
file pertinente (ad es. /etc/pam.d/common-session
su Debian), e quindi quando l'utente accede, PAM
leggerà le variabili d'ambiente da ~/.env
.
Si noti che pam_env
sostanzialmente supporta solo le VAR=value
voci.
Ulteriori informazioni:
Non esiste un file di configurazione di ambiente per shell diverse, perché è anche specifico della shell come sono definite.
In csh si usa setenv
in bash si usa export
per definirli.
Ad ogni modo potresti scrivere il tuo file di configurazione e includerlo source
nei dotfile delle tue shell.