5 Stimmen

bash-Skript zur Anzeige kompatibler Befehle auf der Grundlage der "Windows-Sprache"

Problem: Kunde X ist ein Windows-Benutzer, der in der Lage sein möchte, vorgefertigte Bash-Befehle mit Hilfe von mnemonischen Schlüsselwörtern oder "Tag-Hinweisen" auszulösen, wenn er über die Shell an seinem RedHat-System angemeldet ist.

Beispiel: Kunde X meldet sich über ssh beim Host an und möchte einige routinemäßige Dateioperationen durchführen. Sie möchte Folgendes eingeben können

copy file

und erhalten eine Liste von vorgefertigten Bash-Befehlen zur Auswahl

cp <@source@> <@dest@>               ### simple copy
cp -R <@startdir@>  <@destdir@>      ### recursive copy

Sie möchte dann eines dieser Elemente auswählen, die leere(n) Stelle(n) ausfüllen und einfach die Eingabetaste drücken, um den Befehl auszuführen.

Kunde X ist bereit, im Voraus festzulegen, welche Befehle er wahrscheinlich verwenden möchte (in Windows-Sprache), und dann den Entwickler zu beauftragen, diese in Bash-Befehle zu übersetzen und sie dann in einem Skript zusammenzustellen, das es ihm ermöglicht, Windows-Sprache mit Bash zu sprechen und die Liste der Befehle zurückzubekommen.

HINWEIS: Kunde X mag apropos nicht, weil es voraussetzt, dass man mit den Begriffen der Bash vertraut ist, im Gegensatz zur Windows-Sprache. Zum Beispiel:

 apropos shortcut

gibt ihr keine Auskunft über das Erstellen von Symlinks (obwohl sie genau das will), weil sie nicht weiß, wie Windows-Verknüpfungen in Linux heißen. Natürlich lassen sich Windows-Konzepte nicht zu 100 % übertragen, so dass sie es irgendwann lernen muss, aber sie ist eine vielbeschäftigte Person und bittet um diesen Kurs, um ihr den Einstieg in das Verständnis von Linux zu erleichtern.

Pregunta: Wie kann man am besten mit so etwas anfangen? Gibt es ein Perl-, Python oder Ruby-Skript, das so etwas schon kann? Gibt es etwas in Bash, das diese Art von Funktionsanforderung simulieren kann?

5voto

codelogic Punkte 68703

Was Sie wahrscheinlich wollen, ist das Überschreiben von bash's command-not-found Handler. Hier ist der Abschnitt in /etc/bash.bashrc in einer Standard-Ubuntu-Installation, der den Handler installiert:

...
# if the command-not-found package is installed, use it
if [ -x /usr/lib/command-not-found ]; then
        function command_not_found_handle {
                # check because c-n-f could've been removed in the meantime
                if [ -x /usr/lib/command-not-found ]; then
                   /usr/bin/python /usr/lib/command-not-found -- $1
                   return $?
                else
                   return 127
                fi
        }
fi
...

Wenn ein Befehl nicht gefunden wird, wird ein vom Benutzer angegebenes Programm mit diesem Befehl als Parameter ausgeführt. Im Fall von Ubuntu handelt es sich um ein Python-Programm, das prüft, ob der vom Benutzer eingegebene Befehl eine gültige Anwendung ist, die installiert werden kann, und wenn ja, den Benutzer darüber informiert, dass er/sie sie installieren kann.

Was Sie wahrscheinlich tun möchten, ist, es mit Ihrem Hashref von Befehlen und Verwendungszeichenfolgen zu vergleichen und bei einer Übereinstimmung das entsprechende anzuzeigen.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X