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 desu - <user>
o al iniciar sesión de forma remota a través dessh
), 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