Wie kann ich bindkey verwenden, um ein Skript auszuführen?

9

Wie kann ich in der Z-Shell mit bindkey eine Schlüsselsequenz an ein Skript binden?

Chauncey Garrett
quelle

Antworten:

5

Sie können ein Widget definieren, das Ihr Skript aufruft:

my-script_widget() my-script its args
zle -N my-script_widget
bindkey '\ej' my-script_widget

Aber warum sollten Sie Ihr Skript direkt von zle aus aufrufen wollen?

Wenn etwas angezeigt wird, wird das Display durcheinander gebracht. Wenn die Ausgabe als andere Widget-Nachrichten angezeigt werden soll, haben Sie folgende Möglichkeiten:

my-script_widget() zle -M "$(my-script its args)"

Oder wenn Sie die Ausgabe am Cursor einfügen möchten:

my-script_widget() LBUFFER+=$(my-script its args)
Stéphane Chazelas
quelle
12

Ich denke, Sie brauchen kein Widget dafür:

bindkey -s '\eb' '/path/to/script.sh\n' 

Aus zsh docs :

Neben ZLE-Befehlen können Tastenfolgen mithilfe von 'bindkey -s' an andere Zeichenfolgen gebunden werden.

suside
quelle
1
Das ist nicht Alt-Ban das Skript gebunden /path/to/script.sh\n, sondern wird wie eingegeben eingefügt. Wenn Sie beispielsweise Alt-Bnach der Eingabe echo eingeben, wird der echo /path/to/script.shBefehl ausgeführt und Sie kehren zu einer leeren Eingabeaufforderung zurück (wobei die echo zuvor eingegebene Eingabeaufforderung nicht mehr vorhanden ist).
Stéphane Chazelas
Ja, du hast recht. In einigen Anwendungsfällen reicht es jedoch immer noch aus , als ob getippt .
Suside
3
Fügen Sie eine Eingabe am Ende der Zeichenfolge hinzu und das Skript wird ausgeführt, nachdem es eingefügt wurde.bindkey -s '\eb' '/path/to/script.sh^M'
mihai
@mihai Danke für deinen Kommentar. Es funktioniert perfekt.
jdhao