• Willkommen im Linux Club - dem deutschsprachigen Supportforum für GNU/Linux. Registriere dich kostenlos, um alle Inhalte zu sehen und Fragen zu stellen.

[gelöst] individueller bash-prompt

rig

Newbie
Hallo,

ich hab mir einen individuellen bash-prompt gebastelt. Für "Otto-Normal-User" sieht das so aus:
Code:
PS1="\n\[$(tput bold)\]\w\[$(tput sgr0)\]\r\n\u:\h> "
und ergibt einen Prompt a'la
/irgendein/ordner/tief/im/dateisystem
user:host>

Wenn ich aber als Admin angemeldet bin, dann sollte der untere Bereich Rot sein. Daher
Code:
PS1="\n\[$(tput bold)\]\w\[$(tput sgr0)\]\r\n\[$(tput setf 4)\]\u:\h>\[$(tput setf 0)\] "
Das "soll" ergeben
/irgendein/ordner/tief/im/dateisystem
root:host>

Wenn ich mich jetzt als Root einlogge (z.B. per su) habe ich auch diesen Prompt. Wenn ich
jetzt allerdings 1x Enter drücke, dann ist der obere Bereich nicht mehr bold, sondern grau,
Das ganze sieht dann wie folgt aus:
/irgendein/ordner/tief/im/dateisystem
root:host>

Hier mal ein "Verlauf" einer solchen Sitzung:

/irgendein/ordner/tief/im/dateisystem
user:host> su
su
Passwort:

/irgendein/ordner/tief/im/dateisystem
root:host> # einfach nur ENTER druecken

/irgendein/ordner/tief/im/dateisystem
root:host> # einfach nur ENTER druecken

/irgendein/ordner/tief/im/dateisystem
root:host> exit
exit

/irgendein/ordner/tief/im/dateisystem
user:host> # einfach nur ENTER druecken


/irgendein/ordner/tief/im/dateisystem
user:host> # einfach nur ENTER druecken


/irgendein/ordner/tief/im/dateisystem
user:host>

Kann mir jemand das Verhalten erklären bzw. sagen, was ich machen muß damit der
Root-Prompt so wird wie ich ihn haben will?

Thx & Gruß
rig

PS: Meine "Daten"
Code:
~
user:host> uname -a
Linux host 2.6.22.17-0.1-default #1 SMP 2008/02/10 20:01:04 UTC x86_64 x86_64 x86_64 GNU/Linux

~
user:host> bash --version
GNU bash, version 3.2.25(1)-release (x86_64-suse-linux-gnu)
Copyright (C) 2005 Free Software Foundation, Inc.

~
user:host> cat /etc/SuSE-release
openSUSE 10.3 (X86-64)
VERSION = 10.3
 
OP
rig

rig

Newbie
Komisch, "ls" scheint das Problem kurzzeitig zu beheben:
/irgendein/ordner/tief/im/dateisystem
user:host> #einfach nur ENTER druecken

/irgendein/ordner/tief/im/dateisystem
user:host> su
Passwort:

/irgendein/ordner/tief/im/dateisystem
root:host> #einfach nur ENTER druecken

/irgendein/ordner/tief/im/dateisystem
root:host> #einfach nur ENTER druecken

/irgendein/ordner/tief/im/dateisystem
root:host> ls
datei1 datei2 ordner1 ordner2

/irgendein/ordner/tief/im/dateisystem
root:host> #einfach nur ENTER druecken

/irgendein/ordner/tief/im/dateisystem
root:host> #einfach nur ENTER druecken

/irgendein/ordner/tief/im/dateisystem
root:host> exit
exit

/irgendein/ordner/tief/im/dateisystem
user:host> #einfach nur ENTER druecken

/irgendein/ordner/tief/im/dateisystem
user:host> #einfach nur ENTER druecken

/irgendein/ordner/tief/im/dateisystem
user:host>
Einen anderen Befehl, der dieses bewirkt habe ich noch nicht gefunden...
 
OP
rig

rig

Newbie
notoxp schrieb:
Nach meinem Verständnis sollte der letzte tput einfach wieder ein sgr0 sein. Probiers mal aus ...

Stimmt! Woher wußtest Du das? Steht das irgendwo (und ich hab's überlesen :roll: )?

Gruß
rig
 

regexer

Advanced Hacker
rig schrieb:
Stimmt! Woher wußtest Du das? Steht das irgendwo (und ich hab's überlesen :roll: )?
setf 0 setzt auf die Farbe 0. Die sollte zwar schwarz sein, kann man aber theoretisch definieren wie man will. Deswegen der Gedanke, doch einfach mal sgr0 (=alle Attibute aus) auszuprobieren.

Übrigens: man 5 terminfo habe ich auch noch nie vollständig gelesen... Schein sowieso eine Wissenschaft für sich zu sein. :wink:
 
OP
rig

rig

Newbie
...klingt logisch. Trotzdem würde ich ja denken, das die Zeile "von links nach rechts"
abgearbeitet wird. Sprich wenn dann etwas nach dem ">" nicht in altbekannter Art
und Weise dargestellt werden würde, würde ich das verstehen. Aber das aktuelle
WorkingDirektory ist durch die entsprechenden tput-Anweisungen eigentlich in seiner
Darstellung genau definiert, nämlich als bold (und nicht grau oder sonst was)

Hmmm, aber egal. Es funzt und das ist die Hauptsache

Gruß
rig
 
Kleiner Tipp :)

Ich habe das jetzt schon ewig und mein Auge erfreut sich daran :)

/etc/bash.bashrc.local
Code:
# PS1version=' \[\e[46m\]8.1\[\e[0m\]'
PS1error='$( ret=$? ; test $ret -gt 0 && echo "\[\e[41;93m\]   [$ret]   \[\e[0m\]" )'
PS1user="$( test `whoami` == root && echo '\[\e[101m\]' )\u\[\e[0m\]"
PS1color='\[\e[1;37;44m\]' # Farbe Arbeitsverzeichnis
PS1="$PS1error$PS1user@\h:$PS1color\w\[\e[0m\]$PS1version> "
tty | grep pts > /dev/null && PS1="$PS1\[\e]0;\w - \u@\h\a\]";
export PS1

#gehört nach /etc/
#31.03.2007
#http://www.cboltz.de/de/linux/bashprompt/

gefunden hier:
http://www.cboltz.de/de/linux/bashprompt/

Gruß Peter
 
OP
rig

rig

Newbie
/etc
user@host> cat bash.bashrc.local
##################################################
# PS1 entsprechend setzen
#
if test "$UID" -eq 0 ; then
export PS1="\n\[$(tput bold)\]\w\[$(tput sgr0)\]\r\n\[$(tput setf 4)\]\u:\h>\[$(tput sgr0)\] "
else
export PS1="\n\[$(tput bold)\]\w\[$(tput sgr0)\]\r\n\u:\h> "
fi

/etc
user@host>
 
A

Anonymous

Gast
Fehlt allerdings die Abfrage des Terminaltyps . Das kann unter Umständen ganz schöne Schmiererei geben wenn man zB mal remote von einem anderem Betriebssystem kommt und/oder auf einen Term-Type ankommt der überhaupt keine Farben und keine Attribute unterstützt.
Hintergrunde und weitere Beispiel siehe auch http://www.linupedia.org/opensuse/Farbe_in_der_Konsole

robi
 
OP
rig

rig

Newbie
Wie im Post zu erkennen steht das ganze doch in der Datei "bash.bashrc.local". Diese wird doch nur eingelesen, wenn es sich bei der aktuellen Shell um eine Bash handelt. Und wenn dem so ist, dann sollte diese doch auch Farben können, oder nicht :???: ?

Oder gibt es mehrere Versionen der Bash? Welche die Farben können und welche, die es nicht können??

rig
 
A

Anonymous

Gast
Die bash kann von sich aus gar nichts anzeigen, der ist es egal wohin sie die Ausgaben schickt. Auch /dev/null ist ihr recht. Anzeigen kann nur ein Terminal oder eine Terminalemulation. Diese benutzt Einstellungen und diese werden bei der Anmeldung am Rechner festgelegt, deshalb merkt man solche Kleinigkeiten meist nicht sofort und solange man nur immer im Xterminal arbeitet wahrscheinlich nie. Es gibt verschiedene Protokolle wie die Datenausgabe gesteuert werden kann und was ein Terminal damit wie anzeigen kann, oftmals sind die Eigenschaften von alten Standard Ausgabegerätendabei als Vorbild genommen worden. Bei der Anmeldung wird immer auch mit berücksichtigt, welchen Terminaltype die das Login anfordernde Terminal jetzt voreingestellt hat, da Linux ja versuchen muss seine Ausgaben so an das Terminal zu schicken, das sie dort auch sauber angezeigt werden können.

Wenn du jetzt zB von einem Dos-Fenster oder Windows aus zB remote auf den Linux-Rechner gehen würdest, oder von einer HP-UX oder Solaris, die kennen zb kein "xterm" als TERMAL-Type was Linux default intern nutzt. Wenn du dort mit einem ganz einfachen voreingestelltem Termialtype ankommst, dann können dort bestimmte Sonderzeichen im Terminal bei der Ausgabe eventuell nicht als solche richtig interpretiert werden (steht eben nicht in diesem Protokoll) und es entsteht schnell Schmiererei. Insbesondere wenn dann noch Sonderzeichen zur Positionierung innerhalb des Terminals verwendet wurden wie das zB in GUIs wie yast2 oder mc oder bei Text-editoren der Fall währe. Ähnliche Probleme könnte es auch geben wenn du über Webkonsolen oder anderen Web oder Java basierenden Tools (die nicht unbedingt aus der Linuxwelt sind) auf den Rechner und eine Shell zugreifst. (ZB Web-Konsolen für virtuelle Maschienen oÄ)

Je nachdem was du auf deinem eigenen Rechner machst, wirst du solche kleine Fehler eines Tages vielleicht mal feststellen oder auch eventuell nie merken. Nur hier im Forum werden solche Beiträge von sehr vielen Usern gelesen die arbeiten vielleicht auch noch anders mit ihrem Rechnern, und desshalb sollten wir dann hier der Vollständigkeitshalber solche Dinge mit erwähnen, wenn wir grade drüber stolpern ;)

robi
 
Oben