# bash prompt

## ruth

hallihallo,

heute möchte ich eigenlich nur meinen bash prompt vorstellen.

manchmal fällt es mir schwer, in einem wust von offenen shells den überblick zu behalten.

deshalb habe ich die folgenden dateien angelegt:

~/.bash_profile

```

[ -f "$HOME/.bashrc" ] && . $HOME/.bashrc

```

die dürfte jeder noch so (ähnlich) haben

und dann noch:

~/.bashrc

```

[ -f /etc/profile.d/bash-completion ] && source /etc/profile.d/bash-completion

alias ls='ls --color=auto'

alias nano="nano -w"

function set_prompt {

        local BLACK="\[\033[0;30m\]"

        local BLUE="\[\033[0;34m\]"

        local GREEN="\[\033[0;32m\]"

        local CYAN="\[\033[0;36m\]"

        local RED="\[\033[0;31m\]"

        local PURPLE="\[\033[0;35m\]"

        local BROWN="\[\033[0;33m\]"

        local LIGHT_GRAY="\[\033[0;37m\]"

        local DARK_GRAY="\[\033[1;30m\]"

        local LIGHT_BLUE="\[\033[1;34m\]"

        local LIGHT_GREEN="\[\033[1;32m\]"

        local LIGHT_CYAN="\[\033[1;36m\]"

        local LIGHT_RED="\[\033[1;31m\]"

        local LIGHT_PURPLE="\[\033[1;35m\]"

        local YELLOW="\[\033[1;33m\]"

        local WHITE="\[\033[1;37m\]"

        local NO_COLOUR="\[\033[0m\]"

        if [ "$HOSTNAME" = "leela" ]; then

        local HOST_COLOUR=$GREEN

        elif [ "$HOSTNAME" = "h5877" ]; then

        local HOST_COLOUR=$LIGHT_RED

        fi

        if [ `mount | grep 'noexec' | wc -l` -gt 0 ]; then

        mnt_tmp="${WHITE}[tmp:${LIGHT_GREEN}noexec${WHITE}]${NO_COLOUR}"

        else

                mnt_tmp="${WHITE}[tmp:${LIGHT_RED}exec${WHITE}]${NO_COLOUR}"

        fi

        if [ $UID -eq 0 ]; then

                local user="$WHITE[$LIGHT_RED\u$WHITE@$HOST_COLOUR\h$WHITE]"

        else

                local user="$WHITE[$LIGHT_GREEN\u$WHITE@$HOST_COLOUR\h$WHITE]"

        fi

PS1="${user}\

$mnt_tmp\$NO_COLOUR\

$WHITE($YELLOW\w$WHITE) \\$ $NO_COLOUR"

}

export PROMPT_COMMAND=set_prompt

```

interessant hier ist der teil:

```

        if [ "$HOSTNAME" = "leela" ]; then

        local HOST_COLOUR=$GREEN

        [more_hosts_here]

        elif [ "$HOSTNAME" = "h5694" ]; then

        local HOST_COLOUR=$LIGHT_RED

        [more_hosts_here]

        fi

```

wie man sieht, heisst meine lokale maschine leela

einer meiner _wichtigen_ rechner heisst h5694, was das für eine maschine ist, das kann man sich denken...  :Wink: 

nun, was ist der effekt?

also, als root auf meiner lokalen maschine sieht das dann so aus:

[root@leela][tmp:exec](~) #

als root auf der grossen maschine so:

[root@h5694][tmp:noexec](~) #

ausserdem wird root immer in rot dargestellt, ein unprivilegierter nutzer in grün

die relativ unwichtigen, weil lokalen maschinen in grün, und die wichtigen, weil bloss nichts verkehrt machen darf maschinen in rot

desweiteren wird der mount-zustand (exec || noexec) des /tmp dateisystems dargestellt; dass man nicht vergisst vor dem ausloggen das /tmp wieder auf grün zu setzen...  :Wink: 

die ürsprüngliche version dieses prompts hat mir mal ein kumpel per mail geschickt; ich hab das dann für mich so angepasst...

hoffe, das ist für ein paar leute von nutzen...  :Wink: 

gruss

rootshell

----------

## Minox

Super grosses Merci  :Wink: 

Jetzt brauche ich mir da nicht mehr den Kopf zerbrechen wegen. Ich passe das farblich auch noch aweng an, denn bei mir hat das einen Stich von Italien und ich stehe mehr auf Spanien  :Wink: 

Auf jeden Fall: Danke rootshell

MfG

----------

## Macrobiotus

Schöne Idee (für Leute die sich mit sowas (buntem) nie beschäftigt haben.

Sieht das eigentlich bei euch auch so aus?

```

BROWN='\[\033[0;33m\]'

CYAN='\[\033[0;36m\]'

DARK_GRAY='\[\033[1;30m\]'

GREEN='\[\033[0;32m\]'

HOST_COLOUR='\[\033[1;31m\]'

LIGHT_BLUE='\[\033[1;34m\]'

LIGHT_CYAN='\[\033[1;36m\]'

LIGHT_GRAY='\[\033[0;37m\]'

LIGHT_GREEN='\[\033[1;32m\]'

LIGHT_PURPLE='\[\033[1;35m\]'

LIGHT_RED='\[\033[1;31m\]'

NO_COLOUR='\[\033[0m\]'

PURPLE='\[\033[0;35m\]'

RED='\[\033[0;31m\]'

WHITE='\[\033[1;37m\]'

YELLOW='\[\033[1;33m\]'

[macro@biotus][tmp:exec](~/Bilder/icons) $ ls

audacity.png         firefox.svg           Nautilus2.png    Splash-EvolvingTux.png

beep4.png            gimp.svg              Nautilus.png     web-browser1.svg

blender.png          gnome-gimp.svg        ooo_gulls.svg    web-browser.svg

blender.svg          gnome-terminal.svg    OpenOffice2.png  xmms-rmckenzie.png

cr32-app-kile.png    gthumb.svg            OpenOffice.png   xmms.svg

Digital-Camera1.png  Mozilla-Mail_alt.png  Printer.png

BROWN='\[\033[0;33m\]'

CYAN='\[\033[0;36m\]'

DARK_GRAY='\[\033[1;30m\]'

GREEN='\[\033[0;32m\]'

HOST_COLOUR='\[\033[1;31m\]'

LIGHT_BLUE='\[\033[1;34m\]'

LIGHT_CYAN='\[\033[1;36m\]'

LIGHT_GRAY='\[\033[0;37m\]'

LIGHT_GREEN='\[\033[1;32m\]'

LIGHT_PURPLE='\[\033[1;35m\]'

LIGHT_RED='\[\033[1;31m\]'

NO_COLOUR='\[\033[0m\]'

PURPLE='\[\033[0;35m\]'

RED='\[\033[0;31m\]'

WHITE='\[\033[1;37m\]'

YELLOW='\[\033[1;33m\]'

[macro@biotus][tmp:exec](~/Bilder/icons) $
```

----------

## 7maestro7

was hat es denn mit dem tmp:noexec auf sich....

bzw mit dem mounten von /tmp ich hab da keine Ahnung...

könnte mir jmd mal einen link geben was das soll oder mir das in kurzen worten erklären nur falls jmd langweilig iss...

danke

maestro

----------

## Minox

Ich hab das auch wieder raus genommen mit dem tmp:exec/noexec. Zumindest grept das Script aus der mount list, datei systeme auf denen dateien nicht ausgeführt werden dürfen. Aber da im Befehl "mount" ohne parameter verwendet wird würde er jedes mal wenn ein einziges fs im system das flag noexec hat auf der gesamten shell tmp:noexec anzeigen. Also, entweder ein wenig optimieren oder rausnehmen  :Wink: 

----------

## 7maestro7

ja rausgenommen hab ichs auch ich wollte nur wissen wieso man tmp auf exec/noexec setzen sollte...

----------

## Deever

Alternativ zu alledem kann man screen verwenden und den Hostnamen in der Statuszeile anzeigen. Dann weiß man auch bei anderen Programmen, auf welchem Rechner man gerade arbeitet!  :Wink: 

Gruß && HTH!

/dev

----------

## Minox

 *Macrobiotus wrote:*   

> Schöne Idee (für Leute die sich mit sowas (buntem) nie beschäftigt haben.
> 
> Sieht das eigentlich bei euch auch so aus?

 

Nein eigentlich nicht. Wirst wohl was in der bashrc falsch eingetragen haben. Oder beim copy/paste was kaputt gegangen.

----------

## Macrobiotus

 *Quote:*   

> Wirst wohl was in der bashrc falsch eingetragen haben. Oder beim copy/paste was kaputt gegangen.
> 
> 

 

So wars, danke    :Rolling Eyes: 

----------

## Pamino

Kann mal bitte jemand seine .bashrc ohne das exec posten? Ich mach da irgendwas falsch  :Very Happy: 

Und gibt es eine Möglichkeit statt dem Pfad einfach nur den Ordnernamen in dem man sich befindet anzeigen zu lassen? Wird sonst manchmal zu lang.... den Kompletten Pfad hatte ich sonst immer in der titelleiste und in .bashrc stand nur source /etc/profile. Wie kann ich wieder den Pfad in der Leiste anzeigen lassen?

Edit: Das temp hab ich doch entfernen können ^^

Edit2: Wenn ich das hinzufüge....

if [ "$SHELL" = '/bin/bash' ] || [ "$SHELL" = '/bin/sh' ]

then

        if [ "$TERM" = 'xterm' ]

        then

                PROMPT_COMMAND='echo -ne "\033]0; ${PWD}\007"'

        fi

fi

...dann hab ich in xterm wieder meine alte Titelleiste. Fehlt nur noch der Ordername statt Pfad zur Perfektion....da hab ich aber leider keine idee

----------

## Minox

 *Pamino wrote:*   

> Kann mal bitte jemand seine .bashrc ohne das exec posten? Ich mach da irgendwas falsch 

 

Lösche einfach den Teil:

```
        if [ `mount | grep 'noexec' | wc -l` -gt 0 ]; then 

        mnt_tmp="${WHITE}[tmp:${LIGHT_GREEN}noexec${WHITE}]${NO_COLOUR}" 

        else 

                mnt_tmp="${WHITE}[tmp:${LIGHT_RED}exec${WHITE}]${NO_COLOUR}" 

        fi
```

MfG

----------

## marc

```
export PS1="\033[1;34m\]\u@\h \033[00m\] \t  \033[32m\]\w   \033[1;35m\]\$(/bin/ls -1a | /usr/bin/wc -l | /bin/sed 's: ::g') Einträge \033[00m\]\n\$ \033[00m\]"

alias ls="ls --color"

alias dir="dir --color"

alias su="su -"
```

Für root habe ich die in /etc/profile geändert. root soll ja schliesslich "erkannt" werden.

----------

## sirro

 *7maestro7 wrote:*   

> ja rausgenommen hab ichs auch ich wollte nur wissen wieso man tmp auf exec/noexec setzen sollte...

 

Vorteil: ein (großer?) Teil Exploits laufen ins leere, da diese exec voraussetzen

Nachteil: Manche "normalen" Installer tuns auch nichtmehr. Wer nur mit portage arbeitet sollte damit kein Problem haben  :Wink: 

----------

## toskala

oha, nice one, rootshell  :Wink: 

mal kucken wie ich das verwurschtel  :Wink: 

----------

## equinox0r

ich hab bei mir mal geschaut ich hab die standard .screenrc etwas modifiziert damit sie auch meinen anforderungen gerecht wird  :Wink: 

das funktioniert auch alles soweit nur dass der prompt innerhalb vom screen ziemlich zerschossen ist.

Vorher-Nachher:

```
[8:58:48]}[equinox@dude.zion ]

[/data/home/equinox] $ screen

\[\033[1;32m\][\[\033[1;37m\]\t\[\033[1;32m\]]}[\[\033[1;37m\]\u\[\033[1;32m\]@\[\033[1;37m\]dude.zion \[\033[1;32m\]]\n\[\033[1;32m\][\[\033[1;37m\]\w\[\033[1;32m\]]\[\033[00m\] $  
```

in meiner ~/.screenrc steht:

```
hardstatus alwayslastline "%{wk}%H %{wk}%?%-Lw%?%{wb}%n*%f %t%?(%u)%?%{wk}%?%+Lw%? %{dk}%= %{ck}%Y-%m-%d %{ck}%c"
```

und schlussendlich meine .bashrc (der relevante teil):

```
host_name=`hostname -f`

PROMPT="${mask}[${usercol}\t${mask}]}\

[${white}\u${mask}@${white}${host_name}${mask}]\n\

${mask}[${white}\w${mask}]\

${normal} \$ "

test -z "$PROFILEREAD" && . /etc/profile

if [ "$TERM" == "screen" ]; then

        SCREEN_AUTO=`echo -n -e "\033k\033\134"`

        PS1='$PROMPT $SCREEN_AUTO'

else

        PS1=$PROMPT

fi

export DISPLAY LESS PS1
```

wie krieg ich das richtig hin?

----------

## appro

Ich denke mal du willst aus 

```
PS1='$PROMPT $SCREEN_AUTO'
```

 ein 

```
PS1="$PROMPT $SCREEN_AUTO"
```

 machen :)

Ist die Uhrzeit im Prompt nicht sinnlos, wenn du sie schon im screen unten rechts hast?

----------

## Lukas_Drude

Ich habe mal die Anweisungen befolgt, die abgewandelte Promt funktioniert auch in der Konsole (STRG + F1 bis F4), aber leider weder mit xterm noch mit aterm oder Eterm. Wenn ich dann aber "export PROMPT_COMMAND=set_prompt" eingebe, dann funktioniert alles so, wie es sein soll.

Jetzt würde mir einfallen, dass die Konsolen beim starten gleich den Befehl mit ausführen sollen (mit alias?), aber das ist sicher nicht die angedachte Lösung.

Sicherheitshalber hab ich die http://crs-abi-2006.de/multi/.bashrc nochmal hochgeladen.

----------

## Lukas_Drude

Die Frage hat sich geklärt. Alles steht jetzt in /etc/bash/bashrc und /etc/profile sourced ersteres, so ist alles abgedeckt.

----------

## Moorenkopf

 *ruth wrote:*   

> 
> 
> ```
> 
> alias ls='ls --color=auto'
> ...

 

Du könntest statt dem nano-Alias auch einfach die Zeile set nowrap aus der /etc/nanorc auskommentieren. </klugscheiß>

Ansonsten, nette Idee  :Smile: 

----------

