Jak zapobiec wychodzeniu powłoki adb po Ctrl + C


11

Kiedy wchodzę adb shellna swoje urządzenie (z pulpitu systemu Windows) i uruchamiam tam jakieś polecenie, czasami chcę je zakończyć. Standardowym sposobem uniksowym jest Ctrl+Ckombinacja klawiszy. Jednak kiedy to robię, całość się adb shellkończy.

Jak mogę zakończyć tylko bieżący program wewnątrz powłoki, a nie samą powłokę?


Przeczytałem post na forum, który stwierdził, że <kbd> Ctrl </kbd> + <kbd>] </kbd> działa, ale spróbowałem bez powodzenia. Twój przebieg może się różnić. Wydaje się, że nie ma możliwości włączenia adb pass Ctrl-C, ponieważ nie przechwytuje SIGINT. Standardowa metoda Ctrl-V wydaje się nie działać dla Ctrl-C, choć niestety przekonwertowała Enter na ^J.
— Mateusz

Odpowiedzi:


13

Znalazłem sposób obejścia tego problemu (przynajmniej dla zrootowanego telefonu). Jeśli telefon jest zrootowany, busyboxnajprawdopodobniej jest zainstalowany. sttyjest częścią busybox.

stty intr ^ x

Przedefiniowuje Ctrl+, Xaby działał jako polecenie przerwania, np. To, co poprzednio Ctrl+ C.


3
To całkiem niesamowite.
— Mateusz


3

byłem w stanie zatrzymać topproces i nadal pozostać w powłoce, wpisując następujące w tej kolejności:

C

CTRL+Z

CTRL+M

jeśli nie wpisałbym wszystkich 3 tych kombinacji, nie zatrzymałoby się to i musiałbym CTRL+, Caby wyjść z powłoki. Znalazłem to, próbując różnych kombinacji klawiszy i znalazłem to przez przypadek. YMMV


Ctrl + Z zawiesza proces, np. Musisz go później zabić za pomocą kill lub killall. To obejście jest lepsze niż nic ...
— haimg

zdałem sobie sprawę, że po tym, jak zrobiłem „wyjście”. co zabawne, to nie ctrl + z zrobił cokolwiek, nie wrócił do powłoki, dopóki nie zrobiłem ctrl + m, a jeśli najpierw nie napisałem „c”, nic nie zrobił.
— Ryan Conrad

To nie działa dla mnie ( chociaż vmstatnie próbowałem top). Co ciekawe, kiedy naciskam Ctrl-Z, wygląda na to, że nic się nie dzieje, ale w rzeczywistości moje dane wejściowe są przekierowywane bezpośrednio do powłoki Windows, a nie do adb. Dane wyjściowe adb (z vmstat) ciągle pojawiają się w oknie powłoki, ale mógłbym wpisać cd C:(na przykład) i zadziałałoby w powłoce systemu Windows. Gdybym wtedy nacisnął, Ctrl-Cwyjście zatrzymałoby się i zobaczyłbym za sceną polecenie, które wpisałem do powłoki Windows. Bardzo dziwne!
— Mateusz

3

Ctrl+ \następnie Enterzwykle działa dobrze.

Spowoduje to wysłanie sygnału SIGQUIT, który może nie być odpowiedni dla serwera (na przykład zrzuca plik rdzenia), ale nie sądzę, że jest to problem z używaniem go na telefonie / tablecie z Androidem (który domyślnie nie zrzuca pliku rdzenia ). Proste rozwiązanie, które działa w większości przypadków.


3

W systemie Windows możesz po prostu wpisać [Alt] + [3] za pomocą klawiatury numerycznej (nie zapomnij później nacisnąć Enter).
To wysyła [Ctrl] + [c] do powłoki, tym samym kończąc bieżące polecenie:

D: \ Android> powłoka adb
$ cat
kot
♥
^ C

$ exit
wyjście

D: \ Android>

Zauważ, że [Alt] + [3] wytwarza ASCII-Char ♥ w Windows, który jest równy bajtowi ETX.
Możesz także nacisnąć [Alt] + [0] - [3] (przytrzymaj klawisz Alt, jednocześnie naciskając [0] i [3] na klawiaturze numerycznej), jeśli nie poruszasz okienkiem, aby wyświetlić serce;)

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.