Wie gehe ich mit der Shell-Eingabe um, bevor sie in Bash oder zsh ausgeführt wird? [geschlossen]

0

jedermann. Ich bin ein bash / zsh-Benutzer (Linux). Ich möchte die folgenden Dinge realisieren.

Geben Sie zuerst den Befehl in die bash / zsh-Shell ein, wie zum Beispiel:

$ wundervoll:

Tatsächlich gibt es kein Programm namens "wonderful:". Ich möchte mit der Eingabezeichenfolge eine Funktion (oder ein Programm) behandeln, bevor die Shell den Befehl ausführt . Genauer gesagt, wenn die Befehlseingabe "wunderbar:" ist, liefert die Shell die Eingabe an meine Funktion / mein Programm, und das ist alles, was die Shell tut.

Gibt es eine Möglichkeit, so etwas zu realisieren? Entweder bash oder zsh ist in Ordnung. Vielen Dank für Ihre Aufmerksamkeit!

Libin Wen
quelle
2
Ich bin nicht sicher, ob ich verstehe, was Sie versuchen zu tun. Erreicht die Rohrleitung catzu Ihrem Programm, was Sie wollen?
Dennis

Antworten:

2

Sie können eine Funktion definieren, die aufgerufen command_not_found_handlewird, wenn ein eingegebener Befehl nicht gefunden wird. Dies wird in Bash 4.0 oder höher unterstützt. die äquivalente zshFunktion ist die gleichnamige command_not_found_handler.

Ein einfaches Beispiel, das einen Rechtschreibfehler abfängt printf, andere unbekannte Befehle jedoch als unbekannt zurücklässt.

command_not_found_handle () {
    if [[ $1 == pirntf ]]; then
        printf "${@:2}"
    else
       printf "Command not found: $1"
       return 127
    fi
}
chepner
quelle
Ich habe auch darüber nachgedacht, dies vorzuschlagen, aber er möchte den Befehl ausführen, bevor er ausgeführt wird
weberik
Darum geht es command_not_found_handle. Ohne sie, führt nichts , weil es keinen Befehl gefunden wurde , um auszuführen. Die Funktion nimmt die ungültige Befehlszeile als Eingabe und ermöglicht es Ihnen, sie auseinanderzunehmen und die Argumente an einen anderen bekannten Befehl zu übergeben.
Chepner
1
Tatsächlich funktioniert die Funktion command_not_found_handle in bash, aber es scheint, dass nur command_not_found_handler für zsh funktioniert.
Libin Wen
1

Vielleicht brauchen Sie einen Bash-Alias . Mit einem Alias-Erlaubnis können Sie "wunderbar" definieren, als wäre es ein Befehl. Siehe das Tutorial . Sie können beispielsweise Folgendes hinzufügen:

alias rm='rm -i'
alias cp='cp -i'
alias mv='mv -i'
# -> Prevents accidentally clobbering files.
alias mkdir='mkdir -p'

in Ihre ~ / .bashrc-Datei.

In Ihrem Fall können Sie einem Skript, das die Parameter oder Eingaben verarbeitet, einen Alias ​​"wunderbar" geben und dann einen anderen Befehl aufrufen.

Jonathan Ben-Avraham
quelle