Câu trả lời:
Chỉnh sửa (hoặc tạo) ~/.inputrc
tệp của bạn . Thêm một dòng nói
set echo-control-characters Off
Điều này sẽ hướng dẫn thư viện GNU Readline (mà Bash sử dụng) không xuất ra (echo) bất kỳ ký tự điều khiển nào ra màn hình. Cài đặt sẽ hoạt động trong tất cả các phiên Bash mới sau đó (và trong bất kỳ tiện ích nào khác sử dụng thư viện Readline).
Lưu ý rằng nếu hệ thống Unix của bạn đi kèm với tệp cấu hình toàn hệ thống cho thư viện Readline (thường /etc/inputrc
), thì tệp cấu hình cá nhân của bạn sẽ cần bao gồm tệp đó:
$include /etc/inputrc
set echo-control-characters Off
Một cách khác là tạo một bản sao cá nhân của tệp cấu hình toàn hệ thống và sau đó sửa đổi nó.
sleep 180
và nhấn CTRL + C
~/.inputrc
chưa tồn tại thì chỉ cần tạo tệp có thể mất một số cài đặt hiện có. Trong trường hợp của tôi, lần đầu tiên tôi nhận thấy rằng ctrl + trái và ctrl + phải đã ngừng hoạt động. Việc khắc phục là bắt đầu ~/.inputrc
với dòng này $include /etc/inputrc
. Cũng có thể chỉ cp /etc/inputrc .inputrc
và chỉnh sửa như mong muốn.
Hãy thử như sau:
stty -echoctl
Đối với một lời giải thích xem bài đăng tuyệt vời và chi tiết này từ Stéphane Chazelas cũng giải thích một số stty
tính năng khác .
Nếu bạn muốn thực hiện thay đổi đó vĩnh viễn (và bạn đang sử dụng bash
như ngụ ý trong câu hỏi của bạn) thì tốt nhất bạn nên đưa vào .bashrc
ghi chú của bạn như jlmg ghi chú trong các nhận xét (vì vậy áp dụng cho tất cả các vỏ tương tác).
.bash_profile
vì tệp đó chỉ được phân tích cú pháp bởi shell đăng nhập. Nó nên được đưa vào .bashrc
thay vào đó, vì vậy nó được đọc bởi tất cả các yêu cầu tương tác.
^[[A
stty -echo
vậy. Điều đó tất nhiên cũng sẽ ngăn chặn tiếng vang của mọi thứ khác, điều này có thể khiến câu trả lời này trở nên vô nghĩa nếu tất cả những gì bạn muốn là che giấu ^C
s.
^C
cuối cùng tôi luôn đồng ý với bạn. Nhưng ý ^C
chí sẽ được in ở bất cứ nơi nào con trỏ xuất hiện, có thể ghi đè lên một cặp ký tự ở bất cứ đâu trong lệnh. Điều đó có nghĩa là nếu bạn cần sao chép-dán các phần của lệnh đó, bạn có thể kết thúc bằng một thứ gì đó bị sai lệch. Và điều ^C
này không dễ nhận ra khi nhìn qua thiết bị đầu cuối như nó đã có nếu nó ở cuối lệnh.
Nếu bạn đang cố gắng tìm một cấu hình cho phép lặp lại bình thường (bao gồm echoctl
) và chỉ im lặng tiếng vang của các ký tự tạo tín hiệu, và bạn chắc chắn rằng nó sẽ khả thi vì bạn đã thấy nó hoạt động theo cách đó trước khi ...
Bạn có thể đã nhìn thấy nó theo cách đó. Nhưng nó không còn có thể, vì cam kết này :
cam kết ec5b1157f8e819c72fc93aa6d2d5117c08cdc961
Bật INTR / QUIT / SUSP lặp lại trong kỷ luật dòng N_TTY (ví dụ: ctrl-C sẽ xuất hiện dưới dạng "^ C" nếu stty echoctl được đặt và ctrl-C được đặt là INTR).
Linux dường như là hệ điều hành giống như duy nhất (gần đây tôi đã xác minh điều này trên Solaris, BSD và Mac OS X) không hoạt động theo cách này và tôi thực sự nhớ đây là một xác nhận trực quan tốt về sự gián đoạn của chương trình trong bàn điều khiển hoặc xterm. Tôi nhớ điều này một cách ưu ái từ nhiều Unix mà tôi đã sử dụng trong nhiều năm qua. Mang điều này vào Linux cũng có vẻ là một cách tốt để làm cho nó phù hợp hơn với hành vi giống như tiêu chuẩn.
Nếu bạn nhớ cách Linux sử dụng để không lặp lại điều đó ^C
, cách duy nhất để lấy lại hành vi cũ là vá kernel của bạn. Trong các phiên bản gần đây, tiếng vang của các ký tự tạo tín hiệu nằm ở các dòng 1215-1218 của trình điều khiển / tty / n_tty.c .
set echo-control-characters off