
Ich fragtediese Fragevor einiger Zeit darüber, dass die Shell den Pfad nicht anzeigt. Vor kurzem habe ich herausgefunden, dass der Pfad .bashrc
nicht angezeigt wird (und dies sollte einNormale Übung?). Derzeit sieht die Shell-Eingabeaufforderung folgendermaßen aus:
-bash-4.3#
Nach der Ausführung source .bashrc
erhalte ich die erwartete Shell-Eingabeaufforderung:
root@ubuntu2011:~#
wo ubuntu2011
ist der Computername. Wie kann ich dafür sorgen, dass die Eingabeaufforderung bei jeder Anmeldung wie letzterer aussieht?
ps das .bashrc
ist von:cp /etc/skel/.bashrc ~/.bashrc
AKTUALISIEREN: der Inhalt ~/.profile
ist wie folgt:
# ~/.profile: executed by Bourne-compatible login shells.
if [ "$BASH" ]; then
if [ -f ~/.bashrc ]; then
. ~/.bashrc
fi
fi
mesg n
und echo $BASH
Retouren/bin/bash
AKTUALISIEREN: Antworten auf die Fragen von @terdon:
- Wie melde ich mich beim Server an?
Ich melde mich an als
ssh [email protected]
root
- 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 ~/.bashrc
wird 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_profile
Datei 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