Cách thực thi tập lệnh trong shell khi nhấn phím tắt


14

Làm cách nào tôi có thể thực thi tập lệnh trong Shell khi nhấn phím tắt.

Về cơ bản, điều tôi cần là khi nhấn phím tắt, tập lệnh sẽ đọc từ tệp và hiển thị nội dung đó trong thiết bị đầu cuối.


Tôi đã thử phương pháp bạn đã sử dụng bind '"\e[24~":"airmon-ng start wlan0\n"'nhưng sau khi tôi đóng thiết bị đầu cuối, mọi thứ dường như được đặt lại và tất cả các phím nóng đã biến mất

Câu trả lời:


20

Bạn có thể sử dụng lệnh dựng sẵn, bindđể ánh xạ một phím tắt để nó thực thi một tập lệnh / shell.

Thí dụ

Nói rằng chúng tôi muốn chạy lệnh pwd, khi chúng tôi nhấn F12phím.

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

Bây giờ khi tôi nhấn F12vào dấu nhắc của mình , $:

$ pwd
/home/saml

Xác định phím tắt

Bạn có thể sử dụng kỹ thuật sau để xác định mã thoát cho một phím tắt cụ thể. Trên hầu hết các hệ thống, nhấn Ctrl+ V, nhả, rồi nhấn phím bạn muốn mã. Có một số hệ thống khác nó sẽ làm việc với Mthay vìV

Thí dụ

Nhấn Ctrl+ Vsau đó nhả cả hai CtrlVcuối cùng nhấn F12trong cửa sổ terminal sẽ trả về điều này:

$ ^[[24~

Đầu ra này có thể được hiểu như sau, ^[Escchìa khóa. Vì vậy, khi chúng ta muốn chỉ định khóa cụ thể này bằng bindlệnh, chúng ta cần sử dụng a \eđể biểu thị Esckhóa theo sau là mọi thứ khác ở trên. Vì vậy, bindlệnh trông như thế này:

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

Thực hiện một lệnh ở giữa

Bạn cũng có thể sử dụng bind -xđể thiết lập các phím tắt sẽ chạy các lệnh trong khi bạn đang gõ một cái gì đó tại dấu nhắc và đầu ra của các lệnh này sẽ được hiển thị, nhưng những gì bạn đã gõ tại dấu nhắc sẽ vẫn còn nguyên.

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

LƯU Ý: Phương pháp này chỉ hoạt động với các phím tắt tạo ra 1 ký tự, vì vậy F12sẽ không hoạt động ở đây.

Thí dụ

Hãy đặt bí danh cho phím tắt Alt+ Shift+ W.

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

Nói rằng tôi đang gõ lệnh finger:

$ finger

Bây giờ tôi nhấn phím tắt 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

Những gì đang diễn ra là bindđang chạy lệnh được xác định who, lấy đầu ra của nó và chèn nó vào trước dấu nhắc. Nếu bạn lặp lại, bạn sẽ thấy những gì đang diễn ra, đây là đầu ra từ tôi nhấn nó 2 lần:

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

Vấn đề của bạn

Vì vậy, một ý tưởng sẽ là sử dụng bind -xphương pháp trên và cathiển thị tệp văn bản này theo lời nhắc của bạn:

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

Bây giờ khi tôi chạy các lệnh tôi có thể thấy tệp này như vậy:

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

Đầu ra của tập tin someinfo.txtđang được hiển thị trên fingerlệnh của tôi ở trên.

Người giới thiệu


Tôi chỉ cần hiển thị nội dung, không thực hiện nó.
dùng3539

Vì vậy, liên kết với một kịch bản hiển thị nội dung.
Lars Rohrbach

1
Ctrl + m không hoạt động đối với tôi. Nó hoạt động như thể tôi vừa nhấn enter. Một cách khác tôi nghĩ (tôi là một người mới chơi bash) là nhập echo ' (khoảng trắng sau trích dẫn đơn), sau đó nhấn Ctrl + v, sau đó chọn phím bạn muốn, rồi dấu cách, trích dẫn đơn ... như được mô tả ở đây . Ví dụ:echo ' ^[OD '
aliteralmind
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.