Xóa / xóa mật khẩu vô hình bị nhầm lẫn trên shell / terminal trong Linux


75

Một điều làm tôi khó chịu khi sử dụng thiết bị đầu cuối của Linux là khi tôi phải nhập mật khẩu bất khả xâm phạm, như khi bạn chạy ssh . Đôi khi tôi gõ nhầm một hoặc nhiều chữ cái và sau đó tôi phải nhấn phím xóa lùi một vài lần để đảm bảo rằng tôi đã xóa mọi thứ để bắt đầu lại.

Tôi biết đây không phải là vấn đề lớn nhưng vì vào một ngày khác, tôi phát hiện ra rằng nhấn CTRL + L sẽ "xóa" thiết bị đầu cuối mà tôi tự hỏi liệu có cách nào để xóa / xóa mật khẩu vô hình mà không cần dựa vào backspace hoặc nhấn phím enter để thử lại.

Câu trả lời:


70

Bạn chỉ cần gõ ctrl+ u.

Thưởng thức =)


Không bao giờ biết về điều đó. Thông thường tôi chỉ cần ctrl + C trong một lệnh gõ không mong muốn.
Spidey

10
Xem giải thích của tôi trong câu trả lời khác nếu bạn muốn biết chuyện gì đang xảy ra.
Jim Paris

Tôi đang sử dụng Ctrl + W và khá OK với nó.
shabunc

108

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 đó, bashlà 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 bashvà các chương trình dựa trên đường đọc khác bằng cách đặt thuộc unix-line-discardtính bên trong ~/.inputrctệ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 bashlạ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).


Cảm ơn, điều đó đã giúp tôi truy tìm và khắc phục sự cố 'xóa' của tôi!
Thomas Hóc
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.