it-swarm-es.tech

¿Existe un archivo equivalente ".bashrc" leído por todos los shells?

Es ~/.bashrc el único lugar para especificar variables de entorno específicas del usuario, alias, modificaciones a la variable PATH, etc.?

Pregunto porque parece que ~/.bashrc parece ser bash- solo, pero también existen otros shells ...

115
Stefan

El archivo $HOME/.profile es utilizado por varios shells, incluidos bash, sh, dash y posiblemente otros.

Desde la página de manual de bash:

Cuando se invoca bash como un Shell de inicio de sesión interactivo, ... primero lee y ejecuta comandos del archivo/etc/profile, si ese archivo existe. Después de leer ese archivo, busca ~/.bash_profile, ~/.bash_login y ~/.profile, en ese orden, y lee y ejecuta comandos del primero que existe y es legible.

csh y tcsh explícitamente no miran ~/.profile pero esos proyectiles son anticuados.

97
msw

~/.profile es el lugar adecuado para las definiciones de variables de entorno y para los programas no gráficos que desea ejecutar al iniciar sesión (por ejemplo, ssh-agent, screen -m). Su Shell de inicio de sesión lo ejecuta si es un Shell de estilo Bourne (sh, ksh, bash). Zsh corre ~/.zprofile en su lugar, y Csh y tcsh ejecutan ~/.login.

Si inicia sesión con un administrador de pantalla X (xdm, gdm, kdm, ...), ya sea ~/.profile se ejecuta depende de cómo su distribución y su entorno de escritorio fueron configurados por su distribución. Si inicia sesión en una "sesión personalizada", normalmente se ejecuta ~/.xsession.

~/.bashrc es el lugar adecuado para configuraciones específicas de bash, como alias, funciones, opciones de Shell e indicaciones. Como su nombre indica, es específico de bash; csh tiene ~/.cshrc, ksh tiene ~/.kshrc, y zsh tiene <drumroll> ~/.zshrc.

Ver también:

No hay un archivo común, pero puede hacer que cada Shell se lea desde un archivo común.

  1. bash lee de .bash_profile o .bashrc
  2. zsh lee de .zprofile y.zshrc
  3. ksh lee de .profile o $ENV

Entonces esto es lo que hago:

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

Si tiene acceso de root al sistema, otra forma es configurar pam_env.

Puedes poner

session optional pam_env.so user_envfile=.env

en la correspondiente /etc/pam.d archivo (por ejemplo, /etc/pam.d/common-session en Debian), y luego, cuando el usuario inicia sesión, PAM leerá las variables de entorno de ~/.env.

Tenga en cuenta que pam_env básicamente solo admite VAR=value entradas.

Más información:

23
Mikel

No existe un archivo de configuración de entorno para diferentes shells, ya que incluso Shell especifica cómo se definen.

En csh usas setenv en bash usas export para definirlos.

De todos modos, podría escribir su propio archivo de configuración e incluirlo con source en los archivos de puntos de sus shells.

15
echox