Jak wykonać skrypt w powłoce po naciśnięciu klawisza skrótu

14

Jak mogę wykonać skrypt w Shell po naciśnięciu klawisza skrótu.

Zasadniczo to, czego potrzebuję, to po naciśnięciu klawisza skrótu skrypt powinien odczytać plik i wyświetlić tę zawartość w terminalu.

użytkownik3539
źródło
Wypróbowałem metodę, której użyłeś, bind '"\e[24~":"airmon-ng start wlan0\n"'ale po zamknięciu terminalu wydaje się, że wszystko zostało zresetowane i zniknęły wszystkie skróty

Odpowiedzi:

20

Możesz użyć wbudowanego polecenia, bindaby zmapować skrót klawiaturowy, aby wykonał skrypt polecenia / powłoki.

Przykład

Powiedzmy, że chcemy uruchomić polecenie pwdpo naciśnięciu F12klawisza.

$ bind '"\e[24~":"pwd\n"'

Teraz, gdy naciskam F12na mój monit $:

$ pwd
/home/saml

Określanie skrótów klawiaturowych

Możesz użyć następującej techniki, aby określić kod zmiany znaczenia dla danego skrótu klawiaturowego. W większości systemów naciśnij Ctrl+ V, puść, a następnie naciśnij klawisz, dla którego chcesz wprowadzić kod. Istnieje kilka innych systemów, z którymi będzie działać MzamiastV

Przykład

Naciśnięcie Ctrl+, Va następnie zwolnienie obu, Ctrla na Vkoniec naciśnięcie F12w oknie terminala zwraca:

$ ^[[24~

Ten wynik można interpretować następująco, ^[jest Esckluczem. Więc kiedy chcemy określić ten konkretny klucz za pomocą bindpolecenia, musimy użyć a, \eaby oznaczyć Escklucz, a następnie wszystko inne z góry. Tak z bindwyglądu poleceń takich jak ta:

$ bind '"\e[24~":"....."'

Wykonywanie polecenia w środku

Możesz także skorzystać z bind -xustawień skrótów klawiaturowych, które będą uruchamiać polecenia podczas pisania poleceń w wierszu, a dane wyjściowe tych poleceń będą wyświetlane, ale to, co wpisałeś w wierszu polecenia, pozostanie nienaruszone.

$ bind -x '"\eW":"..."'

UWAGA: Ta metoda działa tylko ze skrótami klawiaturowymi, które generują 1 znak, więc F12tutaj nie będzie działać.

Przykład

Alias ​​skrótu klawiaturowego Alt+ Shift+ W.

$ bind -x '"\eW":"who"'

Powiedzmy, że wpisuję polecenie finger:

$ finger

Teraz uderzyłem skrót klawiaturowy Alt+ Shift+ W:

saml     tty1         2013-09-01 11:01 (:0)
saml     pts/0        2013-09-01 11:03 (:0.0)
saml     pts/1        2013-09-01 11:05 (:0.0)
saml     pts/2        2013-09-01 11:05 (:0.0)
saml     pts/5        2013-09-03 22:45 (:0.0)
$ finger

To, co się dzieje, bindto uruchomienie zdefiniowanego polecenia who, pobranie jego danych wyjściowych i wstawienie przed pytaniem. Jeśli to powtórzysz, zobaczysz, co się dzieje, oto mój wynik 2 razy:

saml     tty1         2013-09-01 11:01 (:0)
saml     pts/0        2013-09-01 11:03 (:0.0)
saml     pts/1        2013-09-01 11:05 (:0.0)
saml     pts/2        2013-09-01 11:05 (:0.0)
saml     pts/5        2013-09-03 22:45 (:0.0)
saml     tty1         2013-09-01 11:01 (:0)
saml     pts/0        2013-09-01 11:03 (:0.0)
saml     pts/1        2013-09-01 11:05 (:0.0)
saml     pts/2        2013-09-01 11:05 (:0.0)
saml     pts/5        2013-09-03 22:45 (:0.0)
$ finger

Twój problem

Jednym z pomysłów byłoby użycie bind -xpowyższej metody i catwyświetlenie tego pliku tekstowego po wyświetleniu monitu:

$ bind -x '"\eW":"cat someinfo.txt"'

Teraz, gdy uruchamiam polecenia, widzę ten plik w następujący sposób:

This is text from some 
multi-line file reminding
me how to do some 
stuff
$ finger 

Dane wyjściowe pliku someinfo.txtsą wyświetlane powyżej mojego fingerpolecenia powyżej.

Bibliografia

slm
źródło
Muszę tylko wyświetlić zawartość, a nie ją wykonać.
user3539,
Więc powiąż ze skryptem wyświetlającym zawartość.
Lars Rohrbach,
1
Ctrl + m nie działa dla mnie. Działa tak, jakbym właśnie nacisnął klawisz Enter. Myślę, że alternatywą (jestem nowicjuszem) jest pisanie echo ' (spacja po pojedynczym cudzysłowie), następnie naciśnij Ctrl + v, następnie żądany klawisz, a następnie spacja, pojedynczy cudzysłów ... jak opisano tutaj . Przykład:echo ' ^[OD '
aliteralmind,