Tôi biết điều này đã được trả lời, nhưng câu trả lời không giải thích điều gì đang xảy ra.
Các ký tự như Ctrl+ Lđược xử lý bởi ứng dụng . Trong trường hợp nhập đầu vào vào vỏ, như thế bash
, nó sẽ xóa màn hình. Một số ứng dụng, như emacs
, sử dụng nó để vẽ lại màn hình và / hoặc nhập lại con trỏ.
Các ký tự như Ctrl+ Utại dấu nhắc mật khẩu được xử lý theo kỷ luật dòng TTY . Chúng sẽ hoạt động bất cứ khi nào thiết bị đầu cuối đầu vào ở chế độ chỉnh sửa dòng "chuẩn", đây là chế độ mà các chương trình của bạn đang ở trong khi bạn nhập mật khẩu. Trong chế độ này, chính hạt nhân Linux đang diễn giải các ký tự này. Bạn có thể xem các chức năng nào được gán cho các phím nào trong đầu ra của stty -a
:
speed 38400 baud; rows 45; columns 128; line = 0;
intr = ^C; quit = ^\; erase = ^?; kill = ^U; eof = ^D; eol = <undef>; eol2 = <undef>; swtch = <undef>; start = ^Q; stop = ^S;
susp = ^Z; rprnt = ^R; werase = ^W; lnext = ^V; flush = ^O; min = 1; time = 0;
-parenb -parodd cs8 -hupcl -cstopb cread -clocal -crtscts
-ignbrk -brkint -ignpar -parmrk -inpck -istrip -inlcr -igncr icrnl ixon -ixoff -iuclc -ixany -imaxbel iutf8
opost -olcuc -ocrnl onlcr -onocr -onlret -ofill -ofdel nl0 cr0 tab0 bs0 vt0 ff0
isig icanon iexten echo echoe echok -echonl -noflsh -xcase -tostop -echoprt echoctl echoke
Ở đây, bạn có thể thấy rằng Ctrl+ Uđược gắn với kill
, mà (theo trang stty man ) sẽ "xóa dòng hiện tại". Bạn cũng có thể sử dụng stty
để thay đổi ánh xạ này:
stty kill ^E # make ctrl-e erase the line
Trang này có rất nhiều thông tin tuyệt vời về lớp TTY nếu bạn quan tâm.
Nếu mọi thứ không đủ khó hiểu: khi ở dấu nhắc của một tương tác bash
, bạn thực sự không ở chế độ chỉnh sửa dòng "chính tắc". Thay vào đó, bash
là nhận trực tiếp từng ký tự khi bạn nhập nó và tự diễn giải các chuỗi điều khiển, thông qua thư viện readline . Tuy nhiên, thư viện này sẽ tôn vinh các ánh xạ bạn đã đặt trên thiết bị đầu cuối của mình, vì vậy bạn vẫn có thể sử dụng stty
để thay đổi chúng. Hoặc, bạn có thể tùy chỉnh chúng một cách độc lập bên trong bash
và các chương trình dựa trên đường đọc khác bằng cách đặt thuộc unix-line-discard
tính bên trong ~/.inputrc
tệp của bạn . Xem trang bash man để biết thêm.
Khi bạn chạy một chương trình, hãy bật bash
lại chế độ chỉnh sửa dòng chính tắc ( stty icanon
) nếu nó được bật trước đó và sau đó vô hiệu hóa lại khi chương trình kết thúc ( stty -icanon
).