Một số phím trên bàn phím của bạn không tương ứng với các ký tự thực tế. Ví dụ, Atương ứng với ký tự a
nhưng phím Upvà F1phím không có ký tự chuyên dụng riêng. Khi nhấn các phím đặc biệt đó, thay vì nhận một ký tự đơn tương ứng với phím, thiết bị đầu cuối sẽ dịch phím nhấn thành một chuỗi đặc biệt gồm nhiều ký tự thường bắt đầu bằng ký tự thoát (thường được hiển thị là ^[
). Ví dụ: Upthường tạo chuỗi ^[[A
(đó là 3 ký tự từ một khóa: thoát [
và A
).
Lý do bạn thường không thấy ^[[A
là vì hầu hết các ứng dụng bảng điều khiển đủ thông minh để dịch các chuỗi đặc biệt thành các lệnh hữu ích thay vì chỉ lặp lại nó vào bàn điều khiển. Để làm điều này, họ tắt tiếng vang tích hợp của thiết bị đầu cuối và xử lý mức thấp hơn của riêng họ. Ví dụ, khi bash
nhìn thấy ^[[A
, nó nhận ra điều đó có nghĩa là bạn đã nhấn Upvà thay vì lặp ^[[A
lại, nó thực hiện cả đống thứ để xóa bất cứ thứ gì bạn đã gõ cho đến nay, lấy lệnh trước đó được lưu trong lịch sử và thay vào đó in ra.
Nếu bạn thấy ^[[A
khi bạn nhấn Up, điều đó thường có nghĩa là tiếng vang của thiết bị đầu cuối được bật và quá trình tiền cảnh (điều khiển trong thiết bị đầu cuối) không thực hiện bất kỳ xử lý đặc biệt nào được đề cập ở trên. Điều này có thể là do ứng dụng đơn giản bỏ qua thiết bị đầu cuối (giống như hầu hết các lệnh không tương tác). Lưu ý rằng thông thường, trình bao đặt thiết bị đầu cuối vào chế độ chính tắc và bật tiếng vang trước khi chạy quy trình nền trước và khôi phục cài đặt của chính nó sau khi lấy lại quyền kiểm soát thiết bị đầu cuối sau khi lệnh thoát.
Tiếng vang có vẻ khá vô hại. Chỉ cần nhớ rằng nếu lệnh đang chạy không đọc từ thiết bị đầu cuối, các ký tự bạn tạo qua bàn phím có thể sẽ kết thúc trong bash
hàng đợi đầu vào, vì vậy hãy cẩn thận những gì bạn nhập vì chúng có thể được hiểu là các lệnh thông thường khi bash
đọc lại từ thiết bị đầu cuối.
Đây thực sự là một sự đơn giản hóa. Do trình tự cụ thể có thể thay đổi theo loại thiết bị đầu cuối, nên thường có nhiều lớp thư viện trừu tượng ở giữa một ứng dụng bàn điều khiển và chính thiết bị đầu cuối. Ví dụ, bash
sử dụng readline
thư viện để thực hiện hầu hết các đầu vào của nó.