GNU/Linux >> LINUX-Kenntnisse >  >> Linux

Was ist der richtige Speicherort für die PS1-Shell-Variable?

Der PS1 Shell-Variable sollte in ~/.bashrc gesetzt werden für die bash Shell, da dies die Initialisierungsdatei ist, die für interaktive Shell-Sitzungen gelesen wird.

Beachten Sie, dass diese Variable eine Shell-Variable ist , keine Umgebungsvariable (es macht keinen Sinn, untergeordnete Prozesse ihren Wert erben zu lassen, und es ist nur die aktuelle Shell, die sie verwendet). Es muss daher nicht mit export exportiert werden .

Verwandte:

  • Was ist der Zweck von .bashrc und wie funktioniert es?

Sie sollten bash nicht starten müssen aus einer der Startdateien der Shell. Starten einer bestimmten Shell von ~/.profile (oder die entsprechende Datei, die sich auf Ihre Login-Shell bezieht) möglicherweise gerechtfertigt, wenn das System, auf dem Sie laufen, es Ihnen nicht erlaubt, Ihre Login-Shell zu ändern. Es sollte nicht darauf geachtet werden Starten Sie die andere Shell, wenn dies die Shell ist, die die Datei bereits ausführt, oder Sie landen möglicherweise in einer Art Endlosschleife.

Die exec Code, den Sie zu Ihrem ~/.bash_profile hinzufügen sollte nie benötigt werden. Ich nehme an, es ist eine Möglichkeit, ~/.bashrc zu bekommen geparst werden (es startet eine interaktive Shell und interaktive bash Shells lesen ~/.bashrc ). Ein besserer Weg, dies zu tun, wäre, eine der Dateien als Quelle für die andere zu verwenden, beispielsweise indem Sie dies in ~/.bash_profile verwenden :

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

Stellen Sie dann PS1 ein in ~/.bashrc (Es sollte nicht nötig sein, HOME zu berühren oder TERM ).

Außerdem löscht der Befehl alle anderen Umgebungsvariablen mit env -i . Es sei denn, Sie haben ganz besondere Gründe Um dies zu tun, sollten Sie dies nicht von Ihren normalen Shell-Startdateien aus tun.


Um aus der Bash-Manpage zu zitieren:

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.

Es hängt also sehr davon ab, wie Sie die Shell starten.

  • Wenn Sie Ihren PS1 haben möchten aktiv in allen Logins Shells (z.B. über su - <user> oder beim Remote-Login über ssh ), legen Sie es im Profil ab .
  • Wenn Sie Ihren PS1 haben möchten aktiv in allen Nicht-Login Shells (z. B. einfach ein anderes Terminal in Ihrer Desktop-Umgebung öffnen), in bashrc einfügen .
  • Wenn Sie es in beiden Fällen aktiv haben möchten, müssen Sie es in beide Dateien einfügen, oder (was einige Linux-Varianten zumindest im Fall des systemweiten /etc/profile und /etc/bash.bashrc ), beziehen Sie die .bashrc im .profil .

PS1 sollte in .bashrc sein . Sie könnten es auch in .profile setzen .

Debian bezieht .bashrc von dort:

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

Linux
  1. Was ein Shell-Dotfile für Sie tun kann

  2. Wie weist man die Ausgabe eines Befehls einer Shell-Variablen zu?

  3. Ressourcen für die Programmierung von portablen Shells?

  4. Was ist das Standard-Root-Passwort für MySQL 5.7

  5. Was ist der herkömmliche Installationsort für Anwendungen unter Linux?

Was ist die Shell unter Linux?

Init-System mit der Shell erkennen?

Was ist Subshell in Linux?

Die for-Schleife in Shell-Skripten verstehen

Was ist die Standard-Shell von Busybox?

Was ist der Unterschied zwischen der Verwendung von Upstream und Location für php-fpm?