Zsh: jak automatycznie zakończyć po poleceniu?


0

każdy. Trochę trudno wytłumaczyć, co chcę zrobić.

Chcę utworzyć skrypt „przykład”, który może wprowadzać długie polecenia po uruchomieniu go z krótkimi parametrami. Na przykład,

$ example server # I input this line manually
$ ssh user@192.168.1.2 # This line is automatically generated by the above command

Aby móc edytować wiersz poleceń w bieżącej linii.

Używam powłoki ZSH. Próbowałem czegoś takiego history ale nie udało się na końcu. Jakieś sugestie?

Odpowiedzi:


1

Myślę, że uruchomienie zewnętrznego skryptu nie jest możliwe (a przynajmniej bardzo hackish), aby w wierszu zachęty można było wszystko edytować

Mając to na uwadze, można rozszerzyć zle (edytor wiersza poleceń zsh) o własne funkcje, tak zwane widgety.

Dowolny widget zdefiniowany przez użytkownika ma dostęp do BUFFER, który zawiera bufor edycji i może być również modyfikowany.

Oto krótki prototyp:

function example () {
    if [[ $BUFFER = 'server' ]]; then
        LBUFFER='ssh user@192.168.1.2 '
    else
        zle accept-line
    fi
}

zle -N example
bindkey '^M' example

zle -N example tworzy nowy widżet o nazwie example i odwzorowuje ją na funkcję o tej samej nazwie. bindkey '^M' example mapy Kontrola + M , znany również jako Powrót , do widgetu example. Więc za każdym razem po prostu wpisz „serwer” i naciśnij Powrót zostaje zastąpiony przez ssh user@192.168.1.2 a kursor jest umieszczony na końcu w celu dalszej edycji, podczas gdy każda inna linia jest wykonywana / akceptowana jak jest.


1

Zamiast korzystać z funkcji powłoki, można również użyć łączenia klawiszy. Na przykład tak:

bindkey -s '\C-e\C-l' 'ssh user@192.168.1.2'

Tutaj -s tworzy substytucję ciągu, patrz man zshzle:

-s in-string out-string ... Powiąż każdy ciąg w każdym ciągu wyjściowym. Gdy wpisany zostanie ciąg, out-string zostanie odepchnięty i potraktowany jako                        wejście do edytora linii. Gdy używany jest także -R, interpretuj łańcuchy znaków jako zakresy.

W powyższym przykładzie możesz użyć CTRL + E , CTRL + L w wkładce ssh user@192.168.1.2 do linii poleceń w bieżącej pozycji kursora.

Ma to tę zaletę, że można łatwo użyć tego skrótu do skonstruowania rury, np.

cat foo |  CTRL + E ,  CTRL + L  = & gt; cat foo | ssh user@192.168.1.2 
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.