GNU/Linux >> Tutoriales Linux >  >> Linux

¿Cuál es la ubicación correcta de la variable Shell de PS1?

El PS1 variable de shell debe establecerse en ~/.bashrc para el bash shell ya que es el archivo de inicialización que se lee para sesiones de shell interactivas.

Tenga en cuenta que esta variable es una variable de shell , no una variable de entorno (no tiene sentido dejar que los procesos secundarios hereden su valor, y es solo el shell actual el que lo usa). Por lo tanto, no es necesario exportarlo con export .

Relacionado:

  • ¿Cuál es el propósito de .bashrc y cómo funciona?

No deberías necesitar iniciar bash desde cualquiera de los archivos de inicio del shell. Comenzando un shell en particular desde ~/.profile (o el archivo correspondiente relacionado con su shell de inicio de sesión) posiblemente esté garantizado si el sistema en el que se está ejecutando no le permite cambiar su shell de inicio de sesión. Se debe tener cuidado de no sin embargo, inicie el otro shell si ese es el shell que ya está ejecutando el archivo, o puede terminar en una especie de bucle infinito.

El exec código que agregas a tu ~/.bash_profile nunca debe ser necesario. Supongo que es una forma de obtener ~/.bashrc para ser analizado (inicia un shell interactivo y un bash interactivo las conchas leen ~/.bashrc ). Una mejor manera de hacerlo sería tener uno de los archivos como origen del otro, por ejemplo, usando esto en ~/.bash_profile :

if [[ -f $HOME/.bashrc ]]; then
    source "$HOME/.bashrc"
fi

Luego establece PS1 en ~/.bashrc (no debería haber necesidad de tocar HOME o TERM ).

La otra cosa que hace el comando es limpiar todas las demás variables de entorno usando env -i . A menos que tenga motivos muy específicos para hacer esto, no debe hacerlo desde sus archivos de inicio de shell ordinarios.


Para citar de la página de manual de bash:

When  bash is invoked as an interactive login shell, or as a non-interactive
shell with the --login option, it first reads and executes commands from the
file  /etc/profile,  if that file exists.  After reading that file, it looks
for ~/.bash_profile, ~/.bash_login, and ~/.profile, in that order, and reads
and  executes  commands from the first one that exists and is readable.  The
--noprofile option may be used when the shell is  started  to  inhibit  this
behavior.

When  a  login  shell  exits, bash reads and executes commands from the file
~/.bash_logout, if it exists.

When an interactive shell that is not a login shell is started,  bash  reads
and  executes  commands  from /etc/bash.bashrc and ~/.bashrc, if these files
exist.  This may be inhibited by using the --norc option.  The --rcfile file
option  will  force  bash  to read and execute commands from file instead of
/etc/bash.bashrc and ~/.bashrc.

Así que depende mucho de cómo inicies el shell.

  • Si quieres tener tu PS1 activo en todos los inicios de sesión shells (por ejemplo, a través de su - <user> o al iniciar sesión de forma remota a través de ssh ), ponlo en perfil .
  • Si quieres tener tu PS1 activo en todos los sin inicio de sesión shells (por ejemplo, simplemente abriendo otra terminal en su entorno de escritorio), colóquelo en bashrc .
  • Si desea tenerlo activo en ambos casos, deberá colocarlo en ambos archivos, o (algo que hacen algunas variantes de Linux al menos en el caso del /etc/profile y /etc/bash.bashrc ), obtenga el .bashrc en el .perfil .

PS1 debe estar en .bashrc . También puede configurarlo en .profile .

Fuentes de Debian .bashrc desde allí:

# if running bash
if [ -n "$BASH_VERSION" ]; then
    # include .bashrc if it exists
    if [ -f "$HOME/.bashrc" ]; then
    . "$HOME/.bashrc"
    fi
fi

Linux
  1. ¿Cuál es el propósito del archivo .bashrc en Linux?

  2. ¿Cuál es la ubicación correcta del archivo mysql.sock en Linux?

  3. Ubicación de .bashrc para Bash en Ubuntu en Windows en Windows 10

  4. ¿Cuál es el punto de montaje más correcto para una partición NTFS permanente?

  5. ¿Cuál es el shell predeterminado de Busybox?

¿Qué es el Shell en Linux?

¿Qué es Subshell en Linux?

Comprender el bucle for en los scripts de Shell

¿Cuál es la razón por la que rmdir(1) y rm(1) coexisten?

¿Cuál es el alcance de las variables de shell exportadas en Unix?

¿Cuál es la mejor manera de establecer una variable de entorno en .bashrc?