Używam Ubuntu 14.04 i mam dziwny problem z ekranem terminala, który mnie bardzo denerwuje. Czy ktoś może mi w tym pomóc lub wyjaśnić, jeśli robię coś złego lub niezgodnego z linuksem? Mam jakieś rozwiązanie, ale chcę zrozumieć, dlaczego tak się dzieje wielokrotnie.
Często kopiuję polecenia bash z moich notatek lub Internetu i czasami otrzymuję dziwne symbole 0 ~ i 1 ~, które zawijają rzeczy, które skopiowałem. Jest to bardzo denerwujące i dzieje się to całkowicie przypadkowo.
Po długich poszukiwaniach dowiedziałem się, że ta funkcja nazywa się trybem wklejania z nawiasami, więc teraz używam tego polecenia, printf "\e[?2004l"
aby naprawić terminal, jeśli ten tryb nagle się włączy.
Czy można w jakiś sposób trwale wyłączyć tę funkcję? Stawiłem temu czoła na wszystkich maszynach Ubuntu, które teraz pracuję. Wcześniej korzystałem z Ubuntu 10.10 i 12.04 i nigdy wcześniej nie miałem takiego problemu.
źródło
bind
analizowania argumentów, których nie rozpoznaje, tak się stanie, jeśli uruchomisz to polecenie przy użyciu Readline przed wersją 7 lub Bash przed 4.4. Ta odpowiedź nie przyniesie nic użytecznego do czasu następnego wydania Ubuntu (17.04).printf
prace podejście, ale to nie działa, gdy umieścić w moim.bashrc
, a funkcja jakoś obraca się z powrotem na okresowo.bind
Podejście łamie mi klawiatury (p
klawisz nie praca, and putting that line in my
~ / .inputrc` prace, przez 10 sekund, a następnie rozpoczyna się konsola barfing się-enaset-enaset-...
zawsze po 10 sekundach od zastosowania. I wreszcie po prostu ręcznie uaktualnione do bash 4.4 od źródła do ustalenia głupi problembind 'set enable-bracketed-paste off'
(ze spacją zamiast pierwszego „-”. Edycja tylko jednego znaku wydaje się niemożliwa.Możesz umieścić to polecenie w swoim
bashrc
. Wtedy obowiązywałoby ono przy każdym otwarciu terminala.Po prostu wpisz
vi ~/.bashrc
i dodajprintf "\e[?2004l"
na końcu i zapisz plik za pomocą:wq
źródło
echo 'printf "\e[?2004l"' >> ~/.bashrc
robi to samo w jednym wierszu i możesz to sprawdzić za pomocątail -n1 ~/.bashrc
. Nie trzeba używaćvi
.Aby odpowiedzieć na pierwotne pytanie, dlaczego tak się dzieje, oto możliwy scenariusz:
Problem w tym, że mój program terminalowy nadal uważa, że wklejanie w nawiasach jest włączone, gdy sshing z powłoki A do powłoki B, więc ciągle dodaje znaki wokół wklejonej zawartości (bity 0 ~ i 1 ~). Powłoka B nie obsługuje ich, więc po prostu przepuszcza je bez zmian. Musisz powiedzieć swojemu terminalowi, aby wyłączył nawias klamrowy, dzięki temu, że twoja powłoka wydrukuje specjalną sekwencję zmiany znaczenia - i tak właśnie
printf "\e[?2004l"
działa.Istnieje kilka sposobów rozwiązania tego problemu:
Jeśli w ogóle nie zależy ci na wklejaniu w nawiasach, wyłącz ją na powłoce A, aby nigdy nie była włączona (odpowiedź @ jwd)
Jeśli chcesz nadal używać wklejania w nawiasach na powłoce A, ale wyłącz na powłoce B, dodaj sekwencję zmiany znaczenia do
.bashrc
(odpowiedź @ MOHRE)Zaktualizuj powłokę B, aby obsługiwała wklejanie w nawiasach, aby poprawnie interpretowała znaki 0 ~ i 1 ~.
Uwaga dodatkowa: jeśli używasz ekranu GNU, musisz uruchomić to
printf
polecenie poza ekranem. Wygląda na to, że nie działa w środku.źródło