Odpowiedzi:
Edytuj (lub utwórz) swój ~/.inputrc
plik. Dodaj wiersz z napisem
set echo-control-characters Off
Poinstruuje to bibliotekę GNU Readline (której używa Bash), aby nie wyświetlała (echa) żadnych znaków kontrolnych na ekranie. Ustawienie będzie aktywne później we wszystkich nowych sesjach Bash (oraz w każdym innym narzędziu, które korzysta z biblioteki Readline).
Zauważ, że jeśli twój system uniksowy zawiera ogólnosystemowy plik konfiguracyjny dla biblioteki Readline (zwykle /etc/inputrc
), wtedy twój osobisty plik konfiguracyjny będzie musiał zawierać ten plik:
$include /etc/inputrc
set echo-control-characters Off
Inną alternatywą jest utworzenie osobistej kopii ogólnosystemowego pliku konfiguracyjnego, a następnie zmodyfikowanie go.
sleep 180
i
~/.inputrc
nie istnieje, po prostu utworzenie pliku może spowodować utratę niektórych istniejących ustawień. W moim przypadku najpierw zauważyłem, że ctrl + lewy i ctrl + prawy przestały działać. Rozwiązaniem było rozpoczęcie mojej ~/.inputrc
od tej linii $include /etc/inputrc
. Możliwe jest również justowanie cp /etc/inputrc .inputrc
i edycja według potrzeb.
Spróbuj wykonać następujące czynności:
stty -echoctl
Wyjaśnienie można znaleźć w tym świetnym i szczegółowym poście od Stéphane Chazelas, w którym wyjaśniono również inne stty
funkcje .
Jeśli chcesz, aby ta zmiana była trwała (i używasz bash
zgodnie .bashrc
z sugestią zawartą w pytaniu), najlepiej wprowadzić ją zgodnie z uwagami jlmg w komentarzach (dotyczy to wszystkich interaktywnych powłok).
.bash_profile
ponieważ plik ten jest analizowany tylko przez powłoki logowania. Powinien zostać wstawiony .bashrc
, aby był czytany przez wszystkie interaktywne wywołania.
^[[A
stty -echo
również. To oczywiście zapobiegnie odbiciu się echa wszystkiego innego, co prawdopodobnie sprawi, że ta odpowiedź nie zadziała, jeśli wszystko, czego chciałeś, to ukryć ^C
literę.
^C
zawsze było na końcu, mógłbym się z tobą zgodzić. Ale ^C
zostanie wydrukowany tam, gdzie był kursor, co może zastąpić parę znaków w dowolnym miejscu polecenia. Oznacza to, że jeśli musisz skopiować i wkleić części tego polecenia, możesz skończyć z czymś zniekształconym. I ^C
nie jest tak łatwo rozpoznawalny, gdy patrzy się na terminal, jak byłby, gdyby był na końcu polecenia.
Jeśli próbujesz znaleźć konfigurację, która pozwoli na normalne echo (w tym echoctl
) i po prostu wyciszy echo znaków generujących sygnał, i jesteś pewien, że powinno to być możliwe, ponieważ widziałeś, jak działa to w ten sposób przed ...
Prawdopodobnie tak to widziałeś. Ale nie jest to już możliwe z powodu tego zatwierdzenia :
zatwierdzić ec5b1157f8e819c72fc93aa6d2d5117c08cdc961
Włącz echo INTR / QUIT / SUSP w dyscyplinie linii N_TTY (np. Ctrl-C pojawi się jako „^ C”, jeśli ustawione jest stty echoctl, a ctrl-C jako INTR).
Linux wydaje się być jedynym systemem uniksopodobnym (ostatnio sprawdziłem to na Solarisie, BSD i Mac OS X), który nie zachowuje się w ten sposób, i naprawdę brakuje mi tego jako dobrego wizualnego potwierdzenia przerwania programu w konsoli lub xterm. Pamiętam to czule z wielu uniksów, z których korzystałem przez lata. Przeniesienie tego do Linuksa również wydaje się dobrym sposobem na uczynienie go jeszcze bardziej zgodnym ze standardowym zachowaniem podobnym do Uniksa.
Jeśli pamiętasz z czułością, jak Linux tego nie powtarzał ^C
, jedynym sposobem na przywrócenie starego zachowania jest łatanie jądra. W najnowszych wersjach echo znaków generujących sygnał znajduje się w wierszach 1215-1218 sterowników / tty / n_tty.c .
set echo-control-characters off