Lo PS1
variabile shell dovrebbe essere impostato in ~/.bashrc
per il bash
shell in quanto questo è il file di inizializzazione che viene letto per le sessioni shell interattive.
Nota che questa variabile è una variabile di shell , non una variabile di ambiente (non ha senso lasciare che i processi figlio ereditino il suo valore, ed è solo la shell corrente che lo usa). Pertanto non ha bisogno di essere esportato con export
.
Correlati:
- Qual è lo scopo di .bashrc e come funziona?
Non dovrebbe essere necessario avviare bash
da uno qualsiasi dei file di avvio della shell. Avvio di una particolare shell da ~/.profile
(o il file corrispondente relativo alla tua shell di login) potrebbe essere giustificato se il sistema su cui stai girando non ti permette di cambiare la tua shell di login. Bisogna fare attenzione a non avvia l'altra shell se questa è la shell che sta già eseguendo il file, o potresti finire in una sorta di ciclo infinito.
Il exec
codice che aggiungi al tuo ~/.bash_profile
non dovrebbe mai essere necessario. Suppongo sia un modo per ottenere ~/.bashrc
da analizzare (avvia una shell interattiva e bash
interattivo le shell leggono ~/.bashrc
). Un modo migliore per farlo sarebbe avere uno dei file come origine dell'altro, per esempio usando this in ~/.bash_profile
:
if [[ -f $HOME/.bashrc ]]; then
source "$HOME/.bashrc"
fi
Quindi imposta PS1
in ~/.bashrc
(non dovrebbe essere necessario toccare HOME
o TERM
).
L'altra cosa che fa il comando è ripulire tutte le altre variabili d'ambiente usando env -i
. A meno che tu non abbia ragioni molto specifiche per fare ciò, non dovresti farlo dai normali file di avvio della shell.
Per citare dalla pagina man di 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.
Quindi dipende molto da come avvii la shell.
- Se vuoi avere il tuo
PS1
attivo in tutti gli login shell (ad esempio tramitesu - <user>
o quando si accede da remoto tramitessh
), inseriscilo in profilo . - Se vuoi avere il tuo
PS1
attivo in tutti i non login shell (ad esempio semplicemente aprendo un altro terminale nel tuo ambiente desktop), inserite in bashrc . - Se vuoi che sia attivo in entrambi i casi, dovrai inserirlo in entrambi i file, o (cosa che alcune versioni di Linux fanno almeno nel caso di /etc/profile e /etc/bash.bashrc ), genera il file .bashrc nel .profile .
PS1
dovrebbe essere in .bashrc
. Puoi anche impostarlo in .profile
.
Debian recupera .bashrc da lì:
# if running bash
if [ -n "$BASH_VERSION" ]; then
# include .bashrc if it exists
if [ -f "$HOME/.bashrc" ]; then
. "$HOME/.bashrc"
fi
fi