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, bindaby zmapować skrót klawiaturowy, aby wykonał skrypt polecenia / powłoki.
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
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ą 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~":"....."'
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ć.
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
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.
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