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!


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
}

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.

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.