# [SOLVED]Gentoo-Standard- ~/.bashrc

## haukew

Moin!

Durch eine Verkettung blöder Umstände ist mir meine bashrc abhanden gekommen - könnte vielleicht jemand die Gentoo-Standard-bashrc posten (besonders die Farbkodierung für root etc. finde ich allerliebst)   :Very Happy: 

Gruß und danke im Voraus, Hauke

----------

## manuels

Moin,

schau mal in /etc/skel

Tschö mit ö

Manuel

----------

## dek

Die Farben werden eigentlich in der /etc/bash/bashrc gesetzt (PS1).

Edit:

Macht die default .bashrc in /etc/skel überhaupt was?

```

if [[ $- != *i* ]] ; then

        # Shell is non-interactive.  Be done now!

        return

fi

```

----------

## smg

Klar, da steht ja noch mehr drin als das, oder?  :Smile: 

----------

## dek

 *smg wrote:*   

> Klar, da steht ja noch mehr drin als das, oder? 

 

Schon, aber der Rest sind halt nur Kommentare.  :Laughing: 

----------

## smg

```
stephan@unimatrix ~ :) $ cat /etc/skel/.bashrc 

# /etc/skel/.bashrc

#

# This file is sourced by all *interactive* bash shells on startup,

# including some apparently interactive shells such as scp and rcp

# that can't tolerate any output.  So make sure this doesn't display

# anything or bad things will happen !

# Test for an interactive shell.  There is no need to set anything

# past this point for scp and rcp, and it's important to refrain from

# outputting anything in those cases.

if [[ $- != *i* ]] ; then

   # Shell is non-interactive.  Be done now!

   return

fi

# Enable colors for ls, etc.  Prefer ~/.dir_colors #64489

if [[ -f ~/.dir_colors ]] ; then

   eval $(dircolors -b ~/.dir_colors)

elif [[ -f /etc/DIR_COLORS ]] ; then

   eval $(dircolors -b /etc/DIR_COLORS)

fi

alias ls='ls --color=auto'

alias grep='grep --colour=auto'

# Change the window title of X terminals 

case ${TERM} in

   xterm*|rxvt*|Eterm|aterm|kterm|gnome)

      PROMPT_COMMAND='echo -ne "\033]0;${USER}@${HOSTNAME%%.*}:${PWD/$HOME/~}\007"'

      ;;

   screen)

      PROMPT_COMMAND='echo -ne "\033_${USER}@${HOSTNAME%%.*}:${PWD/$HOME/~}\033\\"'

      ;;

esac

```

----------

## dek

```

$ cat /etc/skel/.bashrc

# /etc/skel/.bashrc

#

# This file is sourced by all *interactive* bash shells on startup,

# including some apparently interactive shells such as scp and rcp

# that can't tolerate any output.  So make sure this doesn't display

# anything or bad things will happen !

# Test for an interactive shell.  There is no need to set anything

# past this point for scp and rcp, and it's important to refrain from

# outputting anything in those cases.

if [[ $- != *i* ]] ; then

        # Shell is non-interactive.  Be done now!

        return

fi

# Put your fun stuff here.

```

Oooook, einer von uns beiden hat eine veraltete Version.  :Smile: 

----------

## Max Steel

Falls ihr eine dritte Stimme braucht:

```
# /etc/skel/.bashrc

#

# This file is sourced by all *interactive* bash shells on startup,

# including some apparently interactive shells such as scp and rcp

# that can't tolerate any output.  So make sure this doesn't display

# anything or bad things will happen !

# Test for an interactive shell.  There is no need to set anything

# past this point for scp and rcp, and it's important to refrain from

# outputting anything in those cases.

if [[ $- != *i* ]] ; then

        # Shell is non-interactive.  Be done now!

        return

fi

# Put your fun stuff here.
```

Und die hier is in /home/user/

```
# /etc/skel/.bashrc:

#

# This file is sourced by all *interactive* bash shells on startup,

# including some apparently interactive shells such as scp and rcp

# that can't tolerate any output.  So make sure this doesn't display

# anything or bad things will happen !

# Test for an interactive shell.  There is no need to set anything

# past this point for scp and rcp, and it's important to refrain from

# outputting anything in those cases.

if [[ $- != *i* ]] ; then

        # Shell is non-interactive.  Be done now!

        return

fi

# Enable colors for ls, etc.  Prefer ~/.dir_colors #64489

if [[ -f ~/.dir_colors ]]; then

        eval `dircolors -b ~/.dir_colors`

else

        eval `dircolors -b /etc/DIR_COLORS`

fi

# Change the window title of X terminals

case ${TERM} in

        xterm*|rxvt*|Eterm|aterm|kterm|gnome)

                PROMPT_COMMAND='echo -ne "\033]0;${USER}@${HOSTNAME%%.*}:${PWD/$HOME/~}\007"'

                ;;

        screen)

                PROMPT_COMMAND='echo -ne "\033_${USER}@${HOSTNAME%%.*}:${PWD/$HOME/~}\033\\"'

                ;;

esac

shopt -s histappend

PROMPT_COMMAND='history -a'
```

----------

## Polynomial-C

Hi,

die aktuellste .bashrc findet man immer hier (vorausgesetzt, man hat keinen uralten portage-tree  :Wink: ): /usr/portage/app-shells/bash/files/dot-bashrc

Grüße

Poly-C

----------

## haukew

danke für Eure Antworten  :Smile: 

Die "Verkettung blöder Umstände" war übrigens, dass ich mir zum Ausprobieren Arch installiert hatte (ohne natürlich ein Backup von Gentoo zu machen...)

Naja, hab's denn schnell wieder sein lassen und bin wieder zurück bei Mama Gentoo   :Smile: 

----------

## ok

```
# Change the window title of X terminals

case ${TERM} in

        xterm*|rxvt*|Eterm|aterm|kterm|gnome)

                PROMPT_COMMAND='echo -ne "\033]0;${USER}@${HOSTNAME%%.*}:${PWD/$HOME/~}\007"'

                ;;

        screen)

                PROMPT_COMMAND='echo -ne "\033_${USER}@${HOSTNAME%%.*}:${PWD/$HOME/~}\033\\"'

                ;;

esac 
```

Diese Zeilen haben mich mal ziemlich viel Zeit gekostet, als ich den Titel meines xterm-windows ändern wollte.

Dachte schon ich war so "blöd" die Zeilen auszuprobieren und wieder zu vergessen...

Aber ein PROMPT_COMMAND=... sollte meiner Meinung nach nicht als Standard in eine bashrc.

----------

## mv

 *dek wrote:*   

> Oooook, einer von uns beiden hat eine veraltete Version. :)

 

Vermutlich hast Du die neuere, da das meiste bereits in /etc/bash/bashrc enthalten ist und daher nicht "doppelt" auch noch in ~/.bashrc zu sein braucht - ist vor einiger Zeit als Bug gemeldet worden. @MaxSteel: Natürlich wird die ~/.bashrc bei einem Update nicht automatisch von /etc/skel übernommen.

----------

## mv

 *ok wrote:*   

> Aber ein PROMPT_COMMAND=... sollte meiner Meinung nach nicht als Standard in eine bashrc.

 

Zumal es ja ein PS1=$(...) ebenso tut  :Wink: 

----------

## Necoro

 *mv wrote:*   

>  *ok wrote:*   Aber ein PROMPT_COMMAND=... sollte meiner Meinung nach nicht als Standard in eine bashrc. 
> 
> Zumal es ja ein PS1=$(...) ebenso tut 

 

Das ist nicht korrekt. Das PROMPT_COMMAND wird jedes mal neu ausgeführt. Bei PS1=$(...) wird der Befehl nur einmal ausgeführt (nämlich wenn die Variable belegt wird) - und erzielt damit nicht das korrekte ergebnis. (in dem Fall hier schon, wenn man die Prompt-Platzhalter (%h, %u, etc) benutzt)

----------

## mv

 *Necoro wrote:*   

>  *mv wrote:*   Zumal es ja ein PS1=$(...) ebenso tut  
> 
> Das ist nicht korrekt.

 

Ja, war ein Typo: Es hätte PS1='$(...)' heißen müssen.

----------

## Necoro

Ich sehe gerade - auch das wäre nicht das gleiche ...

PROMPT_COMMAND führt nur ein Kommando aus (das was dort gegeben ist ändert den Titel vom xterm). PS1 aber setzt den Prompt. Wenn du das dortige als '$(..)' fürs PS1 setzt, hast du keinen Prompt mehr  :Wink: 

mal ein Beispiel

```
necoro@Devoty ~ $ PROMPT_COMMAND="echo hallo"

hallo

necoro@Devoty ~ $ echo muh

muh

hallo

necoro@Devoty ~ $ cd ..

hallo

necoro@Devoty home $ unset PROMPT_COMMAND

necoro@Devoty home $ PS1='$(echo "hallo $PWD ")'

hallo /home cd necoro

hallo /home/necoro 
```

----------

## ok

```
PS1='$(echo -ne "\033]0;Mein Titel\007")'$PS1
```

!

----------

## mv

Damit's nicht langweilig wird, hier mal die von mir benutzte Funktion zum Setzen des Promptes - "set_prompt -h" zeigt die Optionen. Der Prompt zeigt Benutzer- und Rechnernamen und die Distribution (DISTRITEXT muss entsprechend gesetzt sein; um mit chroot richtig umgehen zu können, sollte die "originale" Distribution in DISTRITEXTSAVE stehen), wobei die jeweiligen Farben bei "root"/*www*/<500-Usern bzw. bei chroot bzw. mit ssh anders sind. Außerdem wird der aktuelle Pfadname angezeigt, der mit (andersfarbigen) "..." in der Mitte versehen wird, falls er zu lang ist.

Der Hauptvorteil, dabei nicht PROMPT_COMMAND zu benutzen, ist, dass man letzteres immer noch zur Verfügung hat, wenn man will.

```
ESCAPE=$'\e'

BLACK="${ESCAPE}[0;30m"

BLUE="${ESCAPE}[0;34m"

GREEN="${ESCAPE}[0;32m"

CYAN="${ESCAPE}[0;36m"

RED="${ESCAPE}[0;31m"

PURPLE="${ESCAPE}[0;35m"

BROWN="${ESCAPE}[0;33m"

LIGHT_GRAY="${ESCAPE}[0;37m"

DARK_GRAY="${ESCAPE}[1;30m"

LIGHTBLUE="${ESCAPE}[1;34m"

LIGHTGREEN="${ESCAPE}[1;32m"

LIGHTCYAN="${ESCAPE}[1;36m"

LIGHTRED="${ESCAPE}[1;31m"

LIGHTPURPLE="${ESCAPE}[1;35m"

YELLOW="${ESCAPE}[1;33m"

WHITE="${ESCAPE}[1;37m"

NORMCOL="${ESCAPE}[0m"

set_prompt() {

   local STATUS='' DISTRI='' SEP=':' PLAIN PLAINC DIR DIRC

   local STARTXSTATUS="${ESCAPE}]0;"

   local ENDXSTATUS=$'\007'

   local STARTSSTATUS="${ESCAPE}k"

   local ENDSSTATUS="${ESCAPE}"'\\'

   local C_USR='' C_AT='' C_HST='' C_DIR='' C_DT='' C_HSH='' C_SEP='' C_END=''

   local H_USR='' H_AT='' H_HST='' H_DIR='' H_DT='' H_HSH='' H_SEP='' H_END=''

   local C_EXT='' C_EXS=''

   local H_EXT='' H_EXS=''

   local EXT='' PEXT='' PCEXT='' DOTS PDOTS

   local COLOR=: SCREEN=: XTERM=: CUT=: ZSH=false EX=false

   local OPEN='\[' CLOSE='\]' EDIR='\w' EUSER='\u' EHST='\h' EPROMPT='\$'

   local D1 D2 D3 ARG

   local OPTIND=1

   while getopts 'CSXle?hH' ARG

   do   case "${ARG}" in

         C) COLOR=false;;

         S) SCREEN=false;;

         X) XTERM=false;;

         l) CUT=false;;

         e) EX=:;;

         *) echo "Usage: set_prompt [options]

 -C No colorized prompt

 -S No screen hardstatus

 -X No xterm hardstatus

 -l Long path (i.e. no path shortening)

 -e Extended prompt"

            return 1;;

      esac

   done

   if [ -n "${DISTRITEXT}" ]

   then   DISTRI="(${DISTRITEXT})"

      SEP="${DISTRI}"

   fi

   [ -z "${BASH}" ] && ZSH=:

   if ${ZSH}

   then   OPEN='%{'; CLOSE='%}'; EDIR='%~' EUSER='%n'; EHST='%m'

      EPROMPT='%(!.&.%%)'; ENDSSTATUS="${ESCAPE}"'\'

   fi

   if ${COLOR}

   then   [ -n "${UID}" ] || UID="$(id -u)"

      [ -n "${GID}" ] || GID="$(id -g)"

      C_AT="${CYAN}"

      C_HST="${GREEN}"

      C_DIR="${LIGHTGREEN}"

      C_DT="${BLUE}"

      C_HSH="${YELLOW}"

      C_SEP="${CYAN}"

      C_END="${NORMCOL}"

      C_EXT="${LIGHTRED}"

      C_EXS="${BROWN}"

      [ -n "${SSH_TTY}${SSH_CONNECTION}" ] && C_HST="${LIGHTRED}"

      [ "${DISTRITEXTSAVE}" != "${DISTRITEXT}" ] && C_SEP="${RED}"

      case "${USER}" in

         *www*) C_USR="${LIGHTBLUE}";;

         *)     C_USR="${BROWN}";;

      esac

      if [ "${UID}" -lt 500 ] || [ "${GID}" -lt 500 ]

      then   C_USR="${LIGHTCYAN}"

         C_HSH="${LIGHTRED}"

      fi

      [ -n "${C_USR}" ] && H_USR="${OPEN}${C_USR}${CLOSE}"

      [ -n "${C_AT}" ]  && H_AT="${OPEN}${C_AT}${CLOSE}"

      [ -n "${C_HST}" ] && H_HST="${OPEN}${C_HST}${CLOSE}"

      [ -n "${C_DIR}" ] && H_DIR="${OPEN}${C_DIR}${CLOSE}"

      [ -n "${C_DT}" ]  && H_DT="${OPEN}${C_DT}${CLOSE}"

      [ -n "${C_HSH}" ] && H_HSH="${OPEN}${C_HSH}${CLOSE}"

      [ -n "${C_SEP}" ] && H_SEP="${OPEN}${C_SEP}${CLOSE}"

      [ -n "${C_END}" ] && H_END="${OPEN}${C_END}${CLOSE}"

      [ -n "${C_EXT}" ] && H_EXT="${OPEN}${C_EXT}${CLOSE}"

      [ -n "${C_EXS}" ] && H_EXS="${OPEN}${C_EXS}${CLOSE}"

   fi

   if ${EX} && ${ZSH}

   then   PEXT='%(?..:%?)'

      PCEXT='%(?.. %?)'

      EXT="%(?..${H_EXS}(${H_EXT}%?${H_EXS}%))"

   fi

   if ${CUT}

   then   DIR='${D}'

      DIRC='${C}'

   else   DIR="${EDIR}"

      DIRC="${DIR}"

   fi

   PLAIN="${EUSER}@${EHST}${DISTRI} ${DIR}${PEXT}"

   PLAINC="${EUSER}@${EHST}${DISTRI}:${DIR}${PCEXT}"

   ${SCREEN} && case "${TERM}" in

      screen*) STATUS="${STARTSSTATUS}${PLAINC}${ENDSSTATUS}";;

   esac

   ${XTERM} && case "${TERM}" in

      xterm*|screen*) STATUS="${STATUS}${STARTXSTATUS}${PLAIN}${ENDXSTATUS}";;

   esac

   if [ -n "${STATUS}" ]

   then   PS1="${OPEN}${STATUS}${C_USR}${CLOSE}"

   else   PS1="${H_USR}"

   fi

   PS1="${PS1}${EUSER}${H_AT}@${H_HST}${EHST}${H_SEP}${SEP}${H_DIR}"

   PS1="${PS1}${DIRC}${EXT}${H_HSH}${EPROMPT} ${H_END}"

   if ${CUT}

   then   PDOTS='...'

      DOTS="${H_DT}${PDOTS}${H_DIR}"

      if ${ZSH}

      then   D1='D="$(print -P "%~")"'

         D2='"${D[0,8]}'

         D3='${D[${#D}-15,${#D}]}"'

      else   D1='D="${PWD#~}"; [ "${D}" = "${PWD}" ] || D="~${D}"'

         D2='${D:0:8}'

         D3='${D: -16}'

      fi

      D2='"${D/????????????????????????????*/'"${D2}"; D3="${D3}"'}"'

      PS1="\"${PS1}\""

      PS1="\$(${D1}; C=${D2}${DOTS}${D3}; D=${D2}${PDOTS}${D3}; echo ${PS1})"

   fi

}

if [ -n "${BASH}" ] && \

   [ "${BASH_VERSINFO[0]}" -eq 3 ]  && [ "${BASH_VERSINFO[1]}" -eq 1 ] && \

   [ "${BASH_VERSINFO[2]}" -le 17 ] && [ "${BASH_VERSINFO[3]}" -le 1 ]

then   set_prompt -l

   # Prompt expansion is buggy in these bash releases - example to test:

   #PS1='$(echo "Strange \[\e[0;32m\]Prompt\[\e[0m\] ")'

else   set_prompt

fi
```

Edit: Einige Bugfixes und (mittlerweile volle) zsh-Kompatibilität (s. Diskussion weiter unten). Für zsh ist zu beachten, dass 

```
setopt prompt_subst
```

 zu setzen ist, und dass das File mit der Funktion mit

```
bash_source() {

   emulate -L sh

   setopt kshglob noshglob braceexpand

   source "$@"

}
```

eingesourced werden sollte (so kann das selbe File für bash und zsh benutzt werden).Last edited by mv on Tue Aug 17, 2010 6:54 pm; edited 8 times in total

----------

## Necoro

/me votes for Prompts in zsh  :Wink: 

----------

## mv

 *Necoro wrote:*   

> /me votes for Prompts in zsh ;)

 

Bisher hat mich von anderen Shells grundsätzlich abgeschreckt, dass man sowieso eine bash im Speicher haben sollte, weil sehr vieles sie benutzt - also wieso Platz und (wiederholte) Ladezeit mit einer weiteren Shell verschwenden?

Im Zuge der Umstellung auf dash, mit der man halt doch schneller bootet, habe ich mir jetzt allerdings die zsh nochmal angeschaut:

Immerhin habe ich meine bash-startup-Files mit einigen Änderungen (zsh kennt z.B. kein [[ "$VARIABLE" ]] und kein ${VARIABLE:0:1}) jetzt auch unter der zsh zum Laufen gebracht; u.a. auch die obige Funktion, die ich jetzt entsprechend editiert habe.

Leider kann ich nicht bestätigen, dass zsh-Prompts bequemer sind: Ich fand keine Möglichkeit die obige Funktion für die zsh einfacher zu gestalten. Schlimmer noch, unter der zsh muss die Option -l zwangsobtruiert werden:

Das "Abschneiden" langer Namen scheint mit der zsh nicht machbar zu sein, weil ein PS1="$(...)" dort eben nur die Ausgabe $(...) ergibt und nicht ausgeführt wird; mit den Conditionals der zsh scheint man das nicht hinzukommen. Aber ich habe natürlich gerade erst angefangen, mir die zsh anzuschauen und lasse mich gerne eines besseren belehren...

----------

## Necoro

 *mv wrote:*   

> Immerhin habe ich meine bash-startup-Files mit einigen Änderungen (zsh kennt z.B. kein [[ "$VARIABLE" ]] und kein ${VARIABLE:0:1}) jetzt auch unter der zsh zum Laufen gebracht

 

Das erste wäre im zsh stil: [[ -n "$VARIABLE" ]] --- für das zweite - keine Ahnung  :Wink: 

Ansonsten - zu deinen Problemen. Ich hab keine Ahnung  :Wink:  - hab mir dein PS1=$(...) funktions holocaust da oben aber auch net näher zu gemüte geführt ^^ ... - empfehle dir mal das hier: http://zsh.dotsrc.org/Guide/zshguide.html ...

Prinzipiell gilt: Die zsh hat für alles irgendwo eine Option - man muss sie nur finden ^^

----------

## mv

 *Necoro wrote:*   

>  *mv wrote:*   Immerhin habe ich meine bash-startup-Files mit einigen Änderungen (zsh kennt z.B. kein [[ "$VARIABLE" ]] und kein ${VARIABLE:0:1}) jetzt auch unter der zsh zum Laufen gebracht 
> 
> Das erste wäre im zsh stil: [[ -n "$VARIABLE" ]] --- für das zweite - keine Ahnung ;)

 

Das herauszufinden, war nicht das Problem. Das Problem ist, dass die zsh das [[ $VARIABLE ]] auch im Kompatibilitätsmodus nicht schluckt, sondern Syntaxfehler bringt und das Einlesen/Ausführen der Files abbricht. Daher kann man die wirklich gute /etc/bash_completion sowie einige Files in /etc/bash_completion.d nicht ohne vorheriges Umschreiben einiger Stellen nutzen. Dies wiederum wird natürlich bei upgrades dieser Files Probleme machen. Und wer will schon eine Shell ohne vernünftig vordefinierte Completions nutzen, wenn man dies bei der Bash haben kann?

 *Quote:*   

> hab mir dein PS1=$(...) funktions holocaust da oben aber auch net näher zu gemüte geführt. [...] Die zsh hat für alles irgendwo eine Option

 

Ja, ich sollte vielleicht mit Worten erklären, was das PS1-Problem so komplex macht:

Ziel ist es, sowohl den sichtbaren Prompt zu setzen als auch ggf. den Prompttext als "hardstatus"-line sowie als "xterm title" durchzureichen - ersteres mit verschiedenen Farben, die letzten beiden ohne Farben.

Als zusätzliches Schmankerl möchte ich mit PS1=$(...) dabei erreichen, dass lange Directorynamen gekürzt werden. Also anstelle von '/usr/share/doc/xf86-input-keyboard-1.1.1' soll im Prompt nur noch '/usr/sha...t-keyboard-1.1.1' erscheinen, wobei die '...' in einer anderen Farbe sein sollen (die Farben natürlich wieder nur im Prompt, nicht im durchgereichten "hardstatus"/"xterm title").

Wenn Du eine Möglichkeit siehst, das in zsh zu machen...

----------

## Necoro

 *mv wrote:*   

> Daher kann man die wirklich gute /etc/bash_completion sowie einige Files in /etc/bash_completion.d nicht ohne vorheriges Umschreiben einiger Stellen nutzen. Dies wiederum wird natürlich bei upgrades dieser Files Probleme machen. Und wer will schon eine Shell ohne vernünftig vordefinierte Completions nutzen, wenn man dies bei der Bash haben kann?

 

Ich kenn die Completions bei der Bash nicht - aber ich weiß, dass ich damals zur zsh gewechselt bin, weil es gerade dort welche gibt  :Smile:  -- tipp: ignorier die bashcompletion und nimm die von zsh -->

emerge -av zsh-completion <--- das bringt dir completion für "equery", "emerge" etc

und in deine ~/.zshrc schreibst du

```
autoload -U compinit

compinit
```

Zu deinem PS1 Problem -> man zshmisc -Sektion "PROMPT EXPANSION" (ist die letzte in der Page)

----------

## mv

 *Necoro wrote:*   

>  *mv wrote:*   Und wer will schon eine Shell ohne vernünftig vordefinierte Completions nutzen, wenn man dies bei der Bash haben kann? 
> 
> Ich kenn die Completions bei der Bash nicht - aber ich weiß, dass ich damals zur zsh gewechselt bin, weil es gerade dort welche gibt  -- tipp: ignorier die bashcompletion und nimm die von zsh -->
> 
> emerge -av zsh-completion <--- das bringt dir completion für "equery", "emerge" etc

 

Ich sprach von vordefinierten completions. Die zsh-completion hat halt nur ein paar für die Gentoo-Utilities, während app-shells/bash-completion Completions für hunderte von Kommandos hat und z.B. die Optionen und Extensions für spezielle Programme wie mplayer immer wieder aktualisiert werden. Das möchte ich wirklich nicht von Hand für jedes Programm in der zsh nachbauen und ständig aktualisieren. Klar, das erste, was ich in zshrc gemacht hatte, war (in Abwandlung einer FAQ)

```
bash_source() {

  emulate -L sh

  local -a BASH_VERSINFO

  BASH_VERSINFO=( 3 2 17 1 release )

  alias shopt=':'

  alias readonly=':'

  alias _expand=_bash_expand

  alias _complete=_bash_comp

  have(){}

  alias have=zsh_have

  setopt kshglob noshglob braceexpand

  source "$@"

}

zsh_have() {

  unset have

  (( ${+commands[$1]} )) && have=yes

}

alias have=zsh_have

autoload -U compinit bashcompinit

compinit -D

bash_source /etc/bash_completion
```

aber leider führt der [[ $VARIABLE ]]-Ärger dazu, dass bash_completion nicht richtig abgearbeitet wird und nur Murks definiert wird, wenn man die entsprechenden Zeilen nicht patcht.

 *Quote:*   

> Zu deinem PS1 Problem -> man zshmisc -Sektion "PROMPT EXPANSION" (ist die letzte in der Page)

 

Das hatte ich mir schon angeschaut, aber leider kann man beim "Kürzen" eben nur einen konstanten String angeben - jedes "%" im "Ersetzungsstring" wird als solches gedruckt statt interpretiert. Dadurch kann man die Filenamen nur an einer Seite kürzen (nicht in der Mitte, wie ich es gerne hätte), und man kann keine Farb-Escape-Sequenzen benutzen, weil sonst die Promptlänge durcheinander käme. Ich habe diese Notlösung jetzt mal im obigen Code eingebaut, aber richtig glücklich bin ich damit nicht.

----------

## Necoro

 *mv wrote:*   

> Ich sprach von vordefinierten completions. Die zsh-completion hat halt nur ein paar für die Gentoo-Utilities, während app-shells/bash-completion Completions für hunderte von Kommandos hat und z.B. die Optionen und Extensions für spezielle Programme wie mplayer immer wieder aktualisiert werden. Das möchte ich wirklich nicht von Hand für jedes Programm in der zsh nachbauen und ständig aktualisieren. Klar, das erste, was ich in zshrc gemacht hatte, war (in Abwandlung einer FAQ)

 

Sorry -- aber bevor du hier schwachsinn erzählst: Im Paket "zsh-completion" sind wirklich nur die für emerge, equery etc. drin --- die anderen sind standardmäßig vorhanden *kopfschüttel* -- erst ausprobieren - denn Reden

----------

## mv

 *Necoro wrote:*   

> die anderen sind standardmäßig vorhanden

 

Du hast recht!   :Cool: 

Ich hätte niemals erwartet, dass Completions für spezielle Anwendungen Teil der zsh selbst sind - vor allem weil ja auf diese Weise Änderungen der Anwendungen ein Update der zsh erzwingen. Daher hatte ich es gar nicht erst probiert.

----------

## Necoro

 *mv wrote:*   

>  *Necoro wrote:*   die anderen sind standardmäßig vorhanden 
> 
> Du hast recht!  
> 
> Ich hätte niemals erwartet, dass Completions für spezielle Anwendungen Teil der zsh selbst sind - vor allem weil ja auf diese Weise Änderungen der Anwendungen ein Update der zsh erzwingen. Daher hatte ich es gar nicht erst probiert.

 

zsh ist an sich der pure Overkill  :Wink:  - also warum sowas nicht auch dort mit reinpacken ^^

----------

## mv

 *Necoro wrote:*   

> zsh ist an sich der pure Overkill  - also warum sowas nicht auch dort mit reinpacken ^^

 

Weil die Release-Zyklen normalerweise wohl nicht zusammenpassen: Wenn es für jede neue bash-completion-Version eine neue bash-Version gegeben hätte, wäre man aus dem Kompilieren nicht mehr herausgekommen.

Es geht übrigens tatsächlich PS1=$(...) in zsh - man muss nur die Option promp_subst setzen.

Den obigen Code habe ich jetzt entsprechend angepasst: Wenn man obige Option setzt, kann man den Prompt jetzt sowohl von bash als auch von zsh aus genießen.

----------

