cooler Bash-Prompt

Vom einfachen Programm zum fertigen Debian-Paket, Fragen rund um Programmiersprachen, Scripting und Lizenzierung.
Antworten
linuxCowboy
Beiträge: 287
Registriert: 05.02.2013 19:47:41

cooler Bash-Prompt

Beitrag von linuxCowboy » 12.05.2013 04:21:33

Ich habe meinen alias r='echo $?' in Rente geschickt:

Code: Alles auswählen

# prompt color according to exit value
FPromptCmd ()
{
	RET=$?
	if [ $RET == 0 ]; then
		RET="" # green
	else
		RET="[$RET]" # red
	fi
}
PROMPT_COMMAND=FPromptCmd

#31-red 32-green 33-brown 34-blue 35-purple 36-cyan 37-white
PS1='\[\e[0;33m\]\! \[\e[35m\]\j ${PWD//\//\[\e[1;34m\]/\[\e[0;32m\]}\[\e[1;$(($?==0?32:31))m\]$RET\[\e[0;36m\]\$ '
So siehts aus:
Bild

Die Farbtabelle is for convenience für eure eignen Ideen...
-der_linux_cowboy --- Besser werden! ... f*** w$$

DeletedUserReAsG

Re: cooler Bash-Prompt

Beitrag von DeletedUserReAsG » 12.05.2013 11:40:45

Hier noch eine Farbtabelle für die, welche nicht unbedingt von Drittseiten nachladen wollen:

Code: Alles auswählen

#!/bin/sh -e

for attr in $(seq 0 1); do
  for fg in $(seq 30 37); do
    for bg in $(seq 40 47); do
      echo -n "\033[$attr;${bg};${fg}m$attr;$fg;$bg\033[m " 
    done
    echo
  done
done
cu,
niemand

Radfahrer

Re: cooler Bash-Prompt

Beitrag von Radfahrer » 12.05.2013 12:56:41

Blinkt denn da wenigstens auch was?

wanne
Moderator
Beiträge: 7462
Registriert: 24.05.2010 12:39:42

Re: cooler Bash-Prompt

Beitrag von wanne » 12.05.2013 21:07:47

Ne ich hab's trotzdem übernmmen.
Allerdings etwas unkomplizierter einfach ein

Code: Alles auswählen

\[\e[1;$(($?==0?32:31))m\][$?]\[\e[0m\] 
vone an meinen Promt
Aber hier Bfehl für mit Blink:

Code: Alles auswählen

PS1="\[\e[1m\]\[\e[$(($?==0?1:5));$(($?==0?32:31))m\][$?]\[\e[0m\] $PS1"
rot: Moderator wanne spricht, default: User wanne spricht.

linuxCowboy
Beiträge: 287
Registriert: 05.02.2013 19:47:41

Re: cooler Bash-Prompt

Beitrag von linuxCowboy » 14.05.2013 00:58:27

Ja, es geht auch ohne PROMPT_COMMAND

Code: Alles auswählen

PS1='\[\e[33m\]\! \[\e[35m\]\j ${PWD//\//\[\e[1;34m\]/\[\e[0;32m\]}\[\e[1;31m\]$(i=$?;((i))&&echo [$i])\[\e[0;36m\] \$ '
...und wie lautet eine alte Unix-Regel ...

Schweigen ist Gold
-der_linux_cowboy --- Besser werden! ... f*** w$$

linuxCowboy
Beiträge: 287
Registriert: 05.02.2013 19:47:41

Re: cooler Bash-Prompt

Beitrag von linuxCowboy » 01.12.2015 23:17:07

...inzwischen mit host:

Code: Alles auswählen

PS1='\[\e[33m\]\! \[\e[35m\]\j \[\e[34m\]\h:${PWD//\//\[\e[1;34m\]/\[\e[0;32m\]}\[\e[1;31m\]$(i=$?;((i))&&echo "[$i]")\[\e[0;36m\] \$ '
:
-der_linux_cowboy --- Besser werden! ... f*** w$$

AndreK
Beiträge: 469
Registriert: 17.05.2007 19:20:58

Re: cooler Bash-Prompt

Beitrag von AndreK » 02.12.2015 17:11:43

linuxCowboy hat geschrieben:Ich habe meinen alias r='echo $?' in Rente geschickt:

Code: Alles auswählen

# prompt color according to exit value
FPromptCmd ()
{
	RET=$?
	if [ $RET == 0 ]; then
		RET="" # green
	else
		RET="[$RET]" # red
	fi
}
PROMPT_COMMAND=FPromptCmd

#31-red 32-green 33-brown 34-blue 35-purple 36-cyan 37-white
PS1='\[\e[0;33m\]\! \[\e[35m\]\j ${PWD//\//\[\e[1;34m\]/\[\e[0;32m\]}\[\e[1;$(($?==0?32:31))m\]$RET\[\e[0;36m\]\$ '
So siehts aus:
Bild

Die Farbtabelle is for convenience für eure eignen Ideen...
Wenn ich auf das Foto klicke dann öffnet sich bei m ir ein popup "Effektiv werben mit sponsorads.de". Danke dafür.

wanne
Moderator
Beiträge: 7462
Registriert: 24.05.2010 12:39:42

Re: cooler Bash-Prompt

Beitrag von wanne » 02.12.2015 23:52:57

AndreK hat geschrieben:Wenn ich auf das Foto klicke dann öffnet sich bei m ir ein popup "Effektiv werben mit sponsorads.de". Danke dafür.
Mein Browser ist so intelligent, das gar nicht erst anzuzeigen, dass da ein verseuchtes Photo ist... :-)
rot: Moderator wanne spricht, default: User wanne spricht.

DeletedUserReAsG

Re: cooler Bash-Prompt

Beitrag von DeletedUserReAsG » 03.12.2015 00:02:30

Wenn ich auf das Foto klicke dann öffnet sich bei m ir ein popup "Effektiv werben mit sponsorads.de". Danke dafür.
Ich verstehe den Sarkasmus nicht. Einerseits ist’s klar, dass Bilder bei den Bilderhostern eine begrenzte Lebensdauer haben, und Direktlinks danach unvorhersehbare Eigenschaften aufweisen (einer der Gründe, warum ich persönlich es für ungeschickt halte, Bilder hier im Forum über so Bilderhoster einzubinden) und dass der Bezugspost 2,5 Jahre alt ist, andererseits habe ich damals nicht zuletzt aus der Überlegung heraus das Script zur lokalen Darstellung der Farben gepostet.

Benutzeravatar
hikaru
Moderator
Beiträge: 13585
Registriert: 09.04.2008 12:48:59

Re: cooler Bash-Prompt

Beitrag von hikaru » 03.12.2015 00:30:02

AndreK hat geschrieben:Wenn ich auf das Foto klicke dann öffnet sich bei m ir ein popup "Effektiv werben mit sponsorads.de". Danke dafür.
Man will dir doch nur helfen, deine Windows-Werbung [1] zu verbessern! ;)

[1] viewtopic.php?f=37&t=157895#p1068812

Benutzeravatar
goeb
Beiträge: 348
Registriert: 26.08.2006 18:12:08
Lizenz eigener Beiträge: MIT Lizenz

Re: cooler Bash-Prompt

Beitrag von goeb » 04.12.2015 03:22:29

Aus meiner /etc/bash.bashrc:

Code: Alles auswählen

# Write and reload history after every command, and show exit status:
show_exit_status() {
   local status=$?
   local signal=
   if (( status )) ; then
      if (( status > 128 )) ; then
         signal=" ($( builtin kill -l $(( status - 128 )) 2>/dev/null ))"
         [[ $signal == ' ()' ]] && signal=''
      fi
      echo -e "\n\033[01;31m[command returned with exit code $status$signal]\033[00;00m\n" >&2
   fi
}

# show_exit_status has to be the first command in there. Do not set this if the shell belongs to mc. mc also has
# to be called with PROMPT_COMMAND unset, e.g. "PROMPT_COMMAND= mc", so we create an mc() function here, too.
if which ps >/dev/null 2>&1 ; then
   if [[ $PPID == '0' || "$( ps -o comm= -p "$PPID" )" != 'mc' ]] ; then
      export PROMPT_COMMAND="show_exit_status ; history -a ; history -c ; history -r ; $PROMPT_COMMAND"
   fi
fi
mc() { PROMPT_COMMAND= /usr/bin/mc "$@" ; }

linuxCowboy
Beiträge: 287
Registriert: 05.02.2013 19:47:41

Re: cooler Bash-Prompt

Beitrag von linuxCowboy » 04.12.2015 15:38:08

Ich habe immer 4 Tabs auf und erachte ein

Code: Alles auswählen

PROMPT_COMMAND='history -a'
als ausreichend, bei entsprechend großer History:

Code: Alles auswählen

HISTSIZE=4000
HISTFILESIZE=8000
HISTTIMEFORMAT="|%d.%m._%a_%T|  "
-der_linux_cowboy --- Besser werden! ... f*** w$$

Benutzeravatar
paedubucher
Beiträge: 856
Registriert: 22.02.2009 16:19:02
Lizenz eigener Beiträge: GNU Free Documentation License
Wohnort: Schweiz
Kontaktdaten:

Re: cooler Bash-Prompt

Beitrag von paedubucher » 07.12.2015 10:14:50

Mein Bash-Prompt ist noch cooler:

Code: Alles auswählen

PS1='$ '
Der spart eine ganze Menge horizontalen Platz. Vor allem wenn man sich in tieferen Verzeichnisstrukturen tummelt, kann der einem auf einem kleineren Bildschirm doch recht schnell einmal ausgehen. Und wenn ich Arbeitsverzeichnis, Benutzername oder Uhrzeit vergessen habe, kann ich immer noch pwd, whoami oder date ausführen.
KISS: Keep it simple, Schweinebacke. :wink:
Habe nun, ach! Java
Python und C-Sharp,
Und leider auch Visual Basic!
Durchaus programmiert mit heissem Bemühn.
Da steh' ich nun, ich armer Tor!
Und bin so klug als wie zuvor.

Benutzeravatar
Meillo
Moderator
Beiträge: 8813
Registriert: 21.06.2005 14:55:06
Wohnort: Balmora
Kontaktdaten:

Re: cooler Bash-Prompt

Beitrag von Meillo » 07.12.2015 10:45:56

paedubucher hat geschrieben:Mein Bash-Prompt ist noch cooler:

Code: Alles auswählen

PS1='$ '
Hehe, auch ich find's cooler, wenn's minimalistischer ist.

Aber ich denke, dass der Prompt nicht cool sein muss, sondern vor allem das liefern muss, was wirklich noetig ist. Das kann bei jedem etwas anderes sein. Hier meine Situation: In welchem Verzeichnis ich mich befinde, weiss ich normalerweise (oder schaue mit pwd nach), darum brauche ich diese Information nicht im Prompt. Da ich aber regelmaessig auf verschiedenen Rechnern arbeite (auch mal in verschiedenen Shells einer tmux-Session via ssh auf unterschiedlichen Rechnern), ist es fuer mich wichtig, zu sehen, auf welchem Rechner ich mich befinde. Der uebliche Ansatz dafuer waere, den Hostname vor das Dollarzeichen zu setzen ... das aber finde ich dann doch zu uncool, so dass ich fuer jeden Rechner einen anderen Smilie habe, der meinen Prompt darstellt. Desweiteren ist es mir wichtig, dass ich meine Befehlseingaben schnell von den Programmausgaben trennen kann. Weil ich schwarz-weiss und Shell-Portabilitaet bevorzuge, erregt mein Prompt nicht durch Farbe Aufmerksamkeit, stattdessen beginnt er mit einem Newline-Zeichen. Somit steht in ~/.profile etwas in der Art:

Code: Alles auswählen

export PS1='
:-) '
Der Smilie wird normalerweise passend zum Hostname abgestimmt, hier eine Beispiel-Session:

Code: Alles auswählen

:-Q date
Mon Dec  7 10:44:23 CET 2015

:-Q pwd
/home/meillo

:-Q hostname
quagga

:-Q echo "$PS1" | od -c
0000000  \n   :   -   Q      \n
0000006

:-Q 
Use ed once in a while!

Benutzeravatar
paedubucher
Beiträge: 856
Registriert: 22.02.2009 16:19:02
Lizenz eigener Beiträge: GNU Free Documentation License
Wohnort: Schweiz
Kontaktdaten:

Re: cooler Bash-Prompt

Beitrag von paedubucher » 07.12.2015 11:10:31

Meillo hat geschrieben:Da ich aber regelmaessig auf verschiedenen Rechnern arbeite (auch mal in verschiedenen Shells einer tmux-Session via ssh auf unterschiedlichen Rechnern), ist es fuer mich wichtig, zu sehen, auf welchem Rechner ich mich befinde.
Ja, in diesem Fall ist das sehr wichtig. Beruflich verwende ich Windows und arbeite mit putty an diversen Systemen. Und dort ist immer oben in der Fensterleiste angezeigt, auf welchem System ich gerade bin. Darum kann ich mir das im Promopt sparen. Und zu Hause sitze ich jeweils physisch vor dem Rechner, den ich gerade malträtiere. Darum komme ich ohne das aus.
Meillo hat geschrieben:Der uebliche Ansatz dafuer waere, den Hostname vor das Dollarzeichen zu setzen ... das aber finde ich dann doch zu uncool, so dass ich fuer jeden Rechner einen anderen Smilie habe, der meinen Prompt darstellt
Vielleicht sollte ich die Smilie-Lösung doch einmal ausprobieren:

Code: Alles auswählen

:-O (Produktivserver)
:-/ (Staging-Server)
:-P (Testserver der Abteilung)
>8-) (mein eigener, virtueller Testserver)
:-)----- (Produktivserver [wenn die Applikation nicht mehr funktioniert, und ich eben gerade meine root-Session beendet habe und zurück auf der normalo-User-Session bin {d.h. es verkackt habe und abstreiten will} – dann wird ein Pinocchio-Smiley angezeigt])
Habe nun, ach! Java
Python und C-Sharp,
Und leider auch Visual Basic!
Durchaus programmiert mit heissem Bemühn.
Da steh' ich nun, ich armer Tor!
Und bin so klug als wie zuvor.

DeletedUserReAsG

Re: cooler Bash-Prompt

Beitrag von DeletedUserReAsG » 07.12.2015 18:04:57

Ich mag meine farbigen Prompts. Jede Maschine und jeder Container hat eine eigene Farbe für den Host, jeder User hat systemübergreifend seine eigene Farbe – so sehe ich zumindest auf dem ersten flüchtigen Blick anhand der Farbkombination, unter welchem User ich gerade auf welchem System rumfuhrwerke. Bei so vielen offenen Shells verliere ich sonst manchmal den Überblick, was bei manchen Aktionen zu ziemlich doofen Resultaten führen kann. Dazu noch der aktuelle Pfad, und ich bin zufrieden.

Benutzeravatar
MegaV0lt
Beiträge: 163
Registriert: 21.11.2011 11:16:07
Lizenz eigener Beiträge: GNU General Public License
Kontaktdaten:

Re: cooler Bash-Prompt

Beitrag von MegaV0lt » 08.12.2015 09:26:00

Ich habe mir aus dem Netz folgenden Promt zusammengebastelt:

Code: Alles auswählen

#-------------------------------------------------------------
# Shell Prompt
#-------------------------------------------------------------
if [[ "${DISPLAY%%:0*}" != "" ]] ; then
  HILIT=${red}   # remote machine: prompt will be partly red
else
  HILIT=${cyan}  # local machine: prompt will be partly cyan
fi

#  --> Replace instances of \W with \w in prompt functions below
#+ --> to get display of full path name.

new_pwd() {
  newPWD=$(pwd) ; pwd_len=30       # Max. PWD-Length
  newPWD=${newPWD/#${HOME}/\~}     # Replace home dir with ~
  if [ ${#newPWD} -gt ${pwd_len} ] ; then
    if [ "${newPWD:0:1}" = "~" ] ; then
      newPWD="~..${newPWD:$((${#newPWD}-${pwd_len}))}"
    else
      newPWD="...${newPWD:$((${#newPWD}-${pwd_len}))}"
    fi
  fi
}

myprompt(){
  if [[ ${EUID} == 0 ]] ; then
    PS1='\[\e[1;31;48;5;234m\]\u \[\e[38;5;240m\]auf \[\e[1;38;5;28;48;5;234m\]\h \[\e[38;5;240m\]am \[\e[38;5;54m\]\D{%d.%m.%Y} \A \[\e[0m\]\n\[\e[0;36;48;5;234m\][$newPWD] \[\e[1;31m\]\$\[\e[0m\] '
  else
    PS1='\[\e[1;38;5;56;48;5;234m\]\u \[\e[38;5;240m\]auf \[\e[1;38;5;28;48;5;234m\]\h \[\e[38;5;240m\]am \[\e[38;5;54m\]\D{%d.%m.%Y} \A \[\e[0m\]\n\[\e[0;38;5;56;48;5;234m\][$newPWD] \[\e[1m\]\$\[\e[0m\] '
  fi
}

# Change the window title of X terminals
case $TERM in
        xterm*|rxvt|Eterm|eterm)
                PROMPT_COMMAND='new_pwd ; echo -ne "\e]0;${USER}@${HOSTNAME%%.*}:${PWD/$HOME/~}\007"'
                ;;
        screen)
                PROMPT_COMMAND='echo -ne "\e_${USER}@${HOSTNAME%%.*}:${PWD/$HOME/~}\e\\"'
                ;;
esac

myprompt # Promt
new_pwd() bewirkt, dass der Pfad nicht zu lang wird

Code: Alles auswählen

root auf HP-T5730 am 08.12.2015 09:25
[/mnt/usbdrive/skinFlatPlus] # cd CryptIcons/
root auf HP-T5730 am 08.12.2015 09:25
[...bdrive/skinFlatPlus/CryptIcons] #
Bild
"Das Internet? Gibt's diesen Blödsinn immer noch?"
[Homer Simpson], Sicherheitsinspektor im Kernkraftwerk Springfield.

TomL

Re: cooler Bash-Prompt

Beitrag von TomL » 08.12.2015 09:54:36

Das war ja jetzt mal ne klasse Anregung.... :THX: ... Die Angabe des Pfades war für mich eigentlich immer wichtig, aber er hat auch manchmal total genervt, wenn der Eingabebereich dahinter praktisch weg war. Das mit der Farbe kannte ich von Minit, aber noch nicht bei Debian. Und nun habe ich alles. Bunt, um "Wer" und auf welcher Maschine anzuzeigen (rot=root, grün=user), natürlich den aktuellen Pfad und trotzdem die volle Bildschirmbreite zur Eingabe... und darüber hinaus immer noch an der bisherigen gewohnten Lesweise angelehnt :D

Code: Alles auswählen

if [ "$USER" == "root" ]; then
    PS1='${debian_chroot:+($debian_chroot)}\[\033[01;31m\]\u@\h\[\033[00m\]:\[\033[01;34m\]\w\[\033[00m\]\r\n\$ '
else
    PS1='${debian_chroot:+($debian_chroot)}\[\033[01;32m\]\u@\h\[\033[00m\]:\[\033[01;34m\]\w\[\033[00m\]\r\n\$ '
fi

michaXXL
Beiträge: 1
Registriert: 28.01.2019 13:17:09

Re: cooler Bash-Prompt

Beitrag von michaXXL » 18.02.2019 20:44:12

mit den folgenden eintrag in der .bashrc wird die pwd in der prompt auf die letzten beiden verzeichnisse gekuerzt

Code: Alles auswählen

PROMPT_DIRTRIM=2

Antworten