Die Bash-Eingabeaufforderung wird bei jeder Anmeldung zurückgesetzt

Die Bash-Eingabeaufforderung wird bei jeder Anmeldung zurückgesetzt

Ich fragtediese Fragevor einiger Zeit darüber, dass die Shell den Pfad nicht anzeigt. Vor kurzem habe ich herausgefunden, dass der Pfad .bashrcnicht angezeigt wird (und dies sollte einNormale Übung?). Derzeit sieht die Shell-Eingabeaufforderung folgendermaßen aus:

-bash-4.3#

Nach der Ausführung source .bashrcerhalte ich die erwartete Shell-Eingabeaufforderung:

root@ubuntu2011:~#

wo ubuntu2011ist der Computername. Wie kann ich dafür sorgen, dass die Eingabeaufforderung bei jeder Anmeldung wie letzterer aussieht?

ps das .bashrcist von:cp /etc/skel/.bashrc ~/.bashrc


AKTUALISIEREN: der Inhalt ~/.profileist wie folgt:

# ~/.profile: executed by Bourne-compatible login shells.

if [ "$BASH" ]; then
  if [ -f ~/.bashrc ]; then
    . ~/.bashrc
  fi
fi

mesg n

und echo $BASHRetouren/bin/bash


AKTUALISIEREN: Antworten auf die Fragen von @terdon:

  1. Wie melde ich mich beim Server an?

Ich melde mich an alsssh [email protected]root

  1. Werden diese Befehle als Root ausgeführt?

Ja.


AKTUALISIEREN: Die Ausgabe von ls -l ~/.{profile,bashrc,bash_profile,bash_login}:

ls: cannot access /root/.bash_login: No such file or directory
-rw-r--r-- 1 root root   63 Dec 24  2012 /root/.bash_profile
-rw-r--r-- 1 root root 3637 May 17 17:00 /root/.bashrc
-rw-r--r-- 1 root root  140 Apr 23  2010 /root/.profile

Antwort1

Dies geschieht, weil Sie sich über anmelden ssh. Es kommt auf die Unterschiede zwischen Login- und Nicht-Login-Shells an. Wenn Sie sich über SSH verbinden, führen Sie eine interaktive Login-Shell aus. Wie in erläutert man bash, wird diese Art von Shell:

Wenn bash als interaktive Login-Shell oder als nicht interaktive Shell mit der Option --login aufgerufen wird, liest und führt es zuerst Befehle aus der Datei /etc/profile aus, falls diese Datei vorhanden ist. Nach dem Lesen dieser Datei sucht es in dieser Reihenfolge nach ~/.bash_profile, ~/.bash_login und ~/.profile und liest und führt Befehle aus der ersten Datei aus, die vorhanden und lesbar ist. Die Option --noprofile kann beim Starten der Shell verwendet werden, um dieses Verhalten zu unterbinden.

Mit anderen Worten ~/.bashrcwird standardmäßig ignoriert, wenn Login-Shells ausgeführt werden. Die einfache Lösung besteht darin, es explizit aus einer der gelesenen Dateien zu beziehen. Wie Sie oben sehen können, versuchen Login-Shells zuerst zu lesen ~/.bash_profile, und wenn das nicht existiert ~/.bash_login, und wenn das auch nicht existiert, lesen sie ~/.profile. Da Sie eine ~/.bash_profileDatei haben, müssen Sie diese Zeilen hinzufügen:

if [ -f ~/.bashrc ]; then
    . ~/.bashrc
fi

Antwort2

Fügen Sie dies in Ihr ~/.profile ein

if [ -f ~/.bashrc ]; then
    . ~/.bashrc
fi

verwandte Informationen