ubuntuusers.de

"complete" tut nix^^

Status: Gelöst | Ubuntu-Version: Server 8.04 (Hardy Heron)
Antworten |

Astorek

Anmeldungsdatum:
30. Januar 2008

Beiträge: 171

Hi @ all,

Also, ich nutze die JeOS-Variante von Ubuntu 8.04 Hardy Heron (also die VM-Variante, mit Updates auf dem neuestem Stand) und komme mit dem "complete"-Befehl in der Konsole nicht klar.

Folgendes: Innerhalb einer Bash-Shell möchte gerne - wie man es bei RedHat-Distros gewöhnt ist - einen "service"-Befehl. Dieser Befehl sollte netterweise eine Tab-Vervollständigung innerhalb des Verzeichnisses /etc/init.d bieten (sprich: Tippe ich "service " ein und drücke zweimal Tab-Taste, sollte die Shell mir eine Auflistung aller darin befindlichen Skripte zurückgeben - genauso, als würde ich mich in dem Verzeichnis gerade befinden).

"service" ist eine function, die ich in der /etc/bash.bashrc eingetragen habe. Die Funktion ansich funktioniert auch tadellos, aber jeglicher Versuch, mittels "complete"-Befehl eine Autovervollständigung in genanntem Verzeichnis zu erreichen, scheiterten. Ich habe keine Ahnung warum, die Syntax müsste korrekt sein^^.

folgende Zeilen habe ich in die /etc/bash.bashrc hinzugefügt (sicherheitshalber auch die genannte Funktion, wichtig ist aber nur die letzte Zeile):

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
function service
{
  test -z "$2" || test -z "$1" && \
    echo "Usage:   service <service-name> <command>" && \
    echo "Example: service cron stop" && \
    return

  "/etc/init.d/$1" "$2"
}

complete -f -X '!/etc/init.d/*' service

Wenn ich mittels "complete -p" nachschaue, sehe ich auch, dass dieser Autovervollständigungs-Typ eingetragen ist. Trotzdem benimmt sich "complete" so, als hätte ich den Befehl nie eingetippt: Bei "service " + TAB listet er mir nur das aktuelle Verzeichnis auf, in dem ich mich gerade befinde (statt /etc/init.d/)...

Was mache ich falsch? Suchfunktion, Wiki u. Google brachten leider keine Antworten...

Astorek

(Themenstarter)

Anmeldungsdatum:
30. Januar 2008

Beiträge: 171

Nach intensiver Fehlersuche (gut, eigentlich durch Zufall) bin ich endlich auf die Ursache gestoßen: "complete" komplettiert scheinbar nur dann das korrekte Verzeichnis, wenn es den eingegebenen Befehl auch innerhalb eines "PATH"-Pfads liegt. Einfach das "service"-Skript in /usr/bin ablegen und ausführbar machen, schon funktioniert die Autovervollständigung.

Schade, dass das scheinbar nirgendwo geschrieben steht, dass man die "functions" der Bash nicht mit der Autovervollständigung (ebenfalls der Bash) kombinieren kann ._.

Problem wär damit erledigt...

Antworten |