GNU/Linux >> Linux Esercitazione >  >> Linux

Qual è la posizione corretta per la variabile PS1 Shell?

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 tramite su - <user> o quando si accede da remoto tramite ssh ), 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

Linux
  1. Cosa può fare per te un file dot di shell

  2. Come assegnare l'output di un comando a una variabile di shell?

  3. Risorse per la programmazione della shell portatile?

  4. Ambito variabile per gli script e le funzioni della shell bash nello script

  5. Qual è la password di root predefinita per MySQL 5.7

Che cos'è la shell in Linux?

Rileva il sistema Init usando la shell?

Che cos'è Subshell in Linux?

Comprendere il ciclo for negli script della shell

Qual è la shell predefinita di Busybox?

Qual è la differenza tra l'utilizzo di upstream e location per php-fpm?