# [geloest] bash-completion will nicht liste durchgehen

## tzzaetaynzz

hallo an alle,

ich habe soeben die bash-completion installiert.

in /etc/bashrc habe ich eingetragen:

```

# Check for interactive shell.

bash=${BASH_VERSION%.*}

bmajor=${bash%.*}; bminor=${bash#*.}

if [ -n "$PS1" ]; then

  if [ $bmajor -eq 2 -a $bminor '>' 04 ] || [ $bmajor -gt 2 ]; then

      if [ -r /etc/bash_completion ]; then

        # Source completion code.

              . /etc/bash_completion

      fi

  fi

fi

unset bash bminor bmajor

```

wenn ich eingebe complete erhalte ich diese liste:

```

complete -o filenames -F _mplayer gmplayer

complete -o filenames -F _mplayer mencoder

complete -o default -o filenames -F _mutt muttng

complete -o filenames -F _longopt uniq

complete -o filenames -F _root_command sudo

complete -o filenames -F _jar jar

complete -F _route route

complete -o filenames -F _rpm rpm

complete -F _iwpriv iwpriv

complete -o default -o filenames -F _mount mount

complete -o default -F _service winbind

complete -o default -F _service dhcdbd

complete -a unalias

```

doch immernoch vervollstaendigt die bash die liste der moeglichen kommandos nicht.

zum beispiel gebe ich ein:

```

[admin@emma ~]$ if<tab>

if         ifconfig   ifenslave  ifrename

ifcfg      ifdown     ifnames    ifup

```

um nun ifconfig aus der liste zu waehlen muß ich "c" tippen und dann "o" um das ifconfig vervollstaendigt zu bekommen. nur das war schon immer bei der bash (ab 2.04). Eigentlich wollt ich das ...

ich gebe ein:

```

[admin@emma ~]$ if<tab>

if         ifconfig   ifenslave  ifrename

ifcfg      ifdown     ifnames    ifup

```

und für jeden <tab> verändert sich der "promt"/ das kommando, also nach einander:

```

[admin@emma ~]$ if<tab>

[admin@emma ~]$ ifcfg<tab>

[admin@emma ~]$ ifconfig<tab><enter>

```

mit anderen worten, die bash geht die liste durch und bietet mir die moeglichkeiten an (wie bei ciscos ios, oder systemrescuelinux).

das ist bash-completion, dachte ich. :think:

----------

## STiGMaTa_ch

 *tzzaetaynzz wrote:*   

> [...]das ist bash-completion, dachte ich. :think:

 

Falsch gedacht  :Wink: 

ein eix bash-completion bringt unter anderem foglendes zutage:

```
* app-shells/bash-completion

     Available versions:  ~20060301 20050121-r10 ~20050721

     Installed:           none

     Homepage:            http://www.caliban.org/bash/index.shtml#completion

     Description:         Programmable Completion for bash
```

Wenn man nun einmal die angegebene Website besucht, kann man nebst einer Beschreibung zu Bash-completion auch ein Screenshot dazu finden.

Dort sieht man, dass man die bash completion für seine Lieblingsprogramme erweitern kann. z.B:

- Du verwendest sehr oft cvs. Sobald du nun cvs eintippst kannst du durch mehrmaliges Tabben die einzelnen Kommandos von cvs (also z.b. checkout, commit, tag etc.) "durchscrollen".

- Du kompilierst sehr viel und möchtest nicht alle --with-x-feature --with-y-feature ausknobeln. Kein Problem mit der bash-completion.

Lieber Gruss

STiGMaTa

----------

## tzzaetaynzz

danke STiGMaTa_ch. dann habe ich wohl mehr erhofft als möglich ist.

aber welche programm kann das was ich will (siehe oben) -

hat du eine idee?

----------

## psyqil

app-shells/zsh macht sowas... Schon 'ne schöne, kann leider noch kein Unicode...   :Sad: 

----------

## tzzaetaynzz

psyqil stimm!

hab mir zsh installiert und - wie du schreibst - sie kann es.

nun haette ich gerne ein bischen was von der zsh und ne menge von der bash,

geht das?  :Wink: 

----------

## Fauli

Die Bash kann das aber auch:

```
bind TAB:menu-complete
```

----------

## monade

 *Fauli wrote:*   

> Die Bash kann das aber auch:
> 
> ```
> bind TAB:menu-complete
> ```
> ...

 

toller Tip, kann man die Vorschlagliste auch "rückwärts" durchlaufen?

----------

## tzzaetaynzz

 *Fauli wrote:*   

> Die Bash kann das aber auch:

 

GEILOMAT!!!   :Very Happy:  Danke Fauli!

Ich finde diese Funktion sollte standardmäßig aktiv sein  :Exclamation: 

Schreibe 

```
bind TAB:menu-complete
```

 in meine .~/bashrc.

Gehört der Aufruf dort hin oder gibt es eine andere config-Datei,

in die ich eher schreiben sollte?

----------

## chrib

Hängt natürlich davo ab, ob Du das nur für Dich möchtest, oder für alle User. Falls letzteres, kannst Du es auch unter /etc/bash/bashrc eintragen.

----------

## psyqil

 *monade wrote:*   

> toller Tip, kann man die Vorschlagliste auch "rückwärts" durchlaufen?

 Prinzipiell schon: *man bash wrote:*   

> menu-complete
> 
>               Similar  to complete, but replaces the word to be completed with a single match from the list of possible completions.  Repeated execution of menu-complete steps through the
> 
>               list of possible completions, inserting each match in turn.  At the end of the list of completions, the bell is rung (subject to the setting of bell-style) and the  original
> ...

 Ich habe nur keine Ahnung, wie man ein negatives Argument übergeben soll und finde auch kein Beispiel im Netz  :Shocked:  ... 

Am liebsten wär mir ja beides, Liste anzeigen und automatisches durchlaufen, hat da vielleicht jemand 'ne Idee? Oder liest hier jemand russisch? http://www.linux.org.ru/view-message.jsp?msgid=1189509&page=1

----------

## Fauli

 *tzzaetaynzz wrote:*   

> Gehört der Aufruf dort hin oder gibt es eine andere config-Datei,
> 
> in die ich eher schreiben sollte?

 

Du kannst die Key-Bindings auch in die Datei ~/.inputrc schreiben (bzw. in /etc/inputrc für alle User) und dann die Bash neu starten:

```
TAB: menu-complete

"\M--": digit-argument

"\e[Z": "\M--\t"
```

Durch langes Rumprobieren habe ich dann auch die Einstellung gefunden, die das Problem mit dem Rückwärtsblättern löst (Zeile 2 und 3 der inputrc).

----------

## tzzaetaynzz

danke fauli, aber wie nutze ich das rueckwaerts blaettern?

wenn ich an meinem gesuchten befehlt "vorbeigetabt" habe,

dann komm ich wie zum vorherigen zurueck?

----------

## Fauli

Sorry, das habe ich ganz vergessen dazuzuschreiben: mit Shift+Tab.

----------

## monade

 *Fauli wrote:*   

> Sorry, das habe ich ganz vergessen dazuzuschreiben: mit Shift+Tab.

 

Hmm, hab diese beiden Zeilen noch eingefügt, aber zumindest bei mir tut das nicht (auch nach Neustarten der Bash), auf Shift+Tab reagiert die Bash einfach gar nicht.

Edit: okay, funktioniert doch, wenn ich es in die .inputrc eintrage, in der .bashrc nicht. Vielen Dank also  :Smile: 

----------

## tzzaetaynzz

bei mir leider auch nicht ...

also auch bei mir funktioniert etwas.    :Embarassed: 

aber ich glaube nicht, dass ich rueckwaerts taben kann

(sondern immer noch vorwaerts, auch wenn ich SHIFT+TAB druecke).

meine ~/.inputrc sieht so aus:

```

      1 TAB: menu-complete

      2 "\M--": digit-argument

      3 "\e[Z": "\M--\t"

```

und wo hast du den tip (TAB: menu-complete) eigentlich her -

gibt es noch mehr menu bindungen?

was mir nun fehlt ist das menus selbst. das wird nicht mehr angezeigt.

ich weiß ich bin masslos   :Smile:  .

----------

## Fauli

Seltsam, dass es bei dir nicht mit dem Rückwärtsblättern funktioniert. Welche Bash-Version benutzt du? 3.1.16?

Die Aktion menu-complete ist in der Manpage von Bash beschrieben. Noch etwas ausführlicher ist die Manpage von readline.

----------

## tzzaetaynzz

hallo fauli,

so, nun habe ich den menu-complete teil in der readline manpage gelesen und auch possible-completions gefunden.

weisst du ob beide funktionen auf tabgelegt werden koennen, so das liste und vervollstaendigung aktiv sind?

----------

## Fauli

Ich glaube nicht, dass man das so einfach hinbekommt, denn das Blättern mit menu-complete ist ja sofort beendet, sobald man eine andere Taste drückt oder eine andere Funktion, wie z. B. possible-completes, ausführt.

----------

## tzzaetaynzz

dann entscheide ich mich lieber für menu-complete. danke.   :Wink: 

----------

