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.
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.
Odpowiedzi:
Możesz użyć wbudowanego polecenia, bind
aby zmapować skrót klawiaturowy, aby wykonał skrypt polecenia / powłoki.
Powiedzmy, że chcemy uruchomić polecenie pwd
po naciśnięciu F12klawisza.
$ bind '"\e[24~":"pwd\n"'
Teraz, gdy naciskam F12na mój monit $
:
$ pwd
/home/saml
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
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ą bind
polecenia, musimy użyć a, \e
aby oznaczyć Escklucz, a następnie wszystko inne z góry. Tak z bind
wyglądu poleceń takich jak ta:
$ bind '"\e[24~":"....."'
Możesz także skorzystać z bind -x
ustawień 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ć.
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, bind
to 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
Jednym z pomysłów byłoby użycie bind -x
powyższej metody i cat
wyś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.txt
są wyświetlane powyżej mojego finger
polecenia powyżej.
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 '
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