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 [email protected] # 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?

Libin Wen
źródło

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 [email protected] '
    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 [email protected] a kursor jest umieszczony na końcu w celu dalszej edycji, podczas gdy każda inna linia jest wykonywana / akceptowana jak jest.

Adaephon
źródło
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 [email protected]'

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 [email protected] 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 [email protected] 
mpy
źródło