Mój problem polega na tym, że powłoka Bash przestaje pokazywać znaki, które do niej wpisuję. Czyta jednak polecenia.
Z tym problemem spotkałem się już kilka razy i nie rozumiem, co go powoduje. Wiem, jak to rozwiązać, ale nie podoba mi się to, kiedy „wuduję” swoją drogę wyjścia z problemów.
Opiszę dwa sposoby, w jakie napotkałem ten problem:
Pracuję nad pewnym procesem, http://pythonpaste.org/script/, a czasami, kiedy go zatrzymuję lub psuje kontrolę, wraca do powłoki. Kiedy idę i wpisuję polecenia w powłoce, znaki, które wpisuję, nie pojawiają się. Po naciśnięciu Enter polecenia są przesyłane. Na przykład:
- Piszę „ls”
- Widzę tylko pusty monit i nic więcej
- Naciskam Enter i wyświetla się lista plików, innymi słowy: polecenie jest wykonywane
- po wydaniu polecenia „reset” powłoka znów zaczyna normalnie działać
Drugi sposób to się dzieje, gdy wydajemy takie polecenie:
$ grep foo * -l | xargs vim
Używam grep, aby znaleźć pliki, które mają określony wzorzec, a następnie chcę otworzyć wszystkie pliki wynikające z grep. Działa to jak urok (choć nie tak szybko, jak się spodziewałem). Ale kiedy wychodzę z Vima, moja powłoka przestaje pokazywać znaki, które do niej wpisuję. Polecenie resetu rozwiązuje problem.
Domyślam się, że oba problemy mają przyczynę leżącą u podstaw, ale jestem trochę zakłopotany tym, jak i czym jest ten powód.
Samo poszukiwanie tego problemu jest problematyczne, ponieważ opis jest niejasny i nie ma dla niego trudnych warunków wyszukiwania.
Edytować
Dając
stty --all
polecenie zgodnie z żądaniem Johna S. Grubera dało następujące dane wyjściowe (białe znaki edytowane dla czytelności)
speed 0 baud;
rows 53;
columns 186;
line = 0;
intr = <undef>;
quit = <undef>;
erase = <undef>;
kill = <undef>;
eof = <undef>;
eol = <undef>;
eol2 = <undef>;
swtch = <undef>;
start = <undef>;
stop = <undef>;
susp = <undef>;
rprnt = <undef>;
werase = <undef>;
lnext = <undef>;
flush = <undef>;
min = 0;
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
stty --all
do mojego pytania. Z góry dziękuję!
stty --all
i wpisz wyniki w swoim pytaniu. Echo jest wyłączaną cechą tty. Vim zrobi to, gdy jest uruchomiony, i przełączy terminal również w tryb surowy. Po wyjściu powinien zresetować ustawienia terminala. Kiedy vim działa, nie chcesz powtarzaći
polecenia, które przełącza edytor w tryb wstawiania, na przykład. Te ustawienia mówią urządzeniu tty, jak powinno przetwarzać to, co wpisujesz. Podczas działania vima dba o echo tego, co powinno zostać powtórzone itp.