Como impedir que o shell adb saia após Ctrl + C

11

Quando entro adb shellno meu dispositivo (na área de trabalho do Windows) e executo algum comando lá, às vezes quero finalizar esse comando. A maneira unixy padrão de fazer isso é com a Ctrl+Ccombinação de teclas. No entanto, quando faço isso, o todo adb shelltermina.

Como posso finalizar apenas o programa atual dentro do shell, não o próprio shell?

haimg
fonte
Eu li uma postagem no fórum alegando que <kbd> Ctrl </kbd> + <kbd>] </kbd> funcionava, mas tentei sem sorte. Sua milhagem pode variar. Parece não haver maneira de o adb passar o Ctrl-C, pois ele não captura o SIGINT. O método Ctrl-V padrão não parece funcionar para o Ctrl-C, embora tenha convertido Enter em ^J, infelizmente.
Mateus Leia

Respostas:

13

Eu encontrei uma espécie de solução alternativa para isso (pelo menos para um telefone raiz). Se um telefone estiver enraizado, busyboxprovavelmente está instalado. sttyfaz parte do busybox.

intrty stty x

Redefine Ctrl+ Xpara atuar como um comando de pausa, por exemplo, que era anteriormente Ctrl+ C.

haimg
fonte
3
Isso é incrível.
Mateus Leia
5

Alt- NumPad 3+ Enterfunciona para mim. Alt- NumPad 0- NumPad 3+ Entertambém funciona e exibe "^ C".

Christian d'Heureuse
fonte
3

Consegui parar o topprocesso e ainda permanecer no shell digitando o seguinte nesta ordem:

C

CTRL+Z

CTRL+M

se eu não digitasse todos os três combos, ele não parava e eu precisava CTRL+ Cpara sair do shell. Eu descobri isso apenas tentando diferentes combinações de teclas e encontrei por acidente. YMMV

Ryan Conrad
fonte
Ctrl + Z suspende um processo, por exemplo, você precisa matá-lo mais tarde com kill ou killall. Esta solução é melhor do que nada, embora ...
haimg
eu percebi que depois quando eu fiz uma "saída". engraçado, não foi o ctrl + z que fez nada, ele realmente não voltou ao shell até que eu fiz o ctrl + m, e se eu não digitar "c" primeiro, ele não fez nada.
Ryan Conrad
Isso não funciona para mim (eu tentei vmstatnão top). Curiosamente, quando pressiono Ctrl-Z, parece que nada acontece, mas, na verdade, minha entrada começa a ser redirecionada diretamente para o shell do Windows e não para adb. A saída do adb (do vmstat) continua aparecendo na janela do shell, mas eu poderia digitar cd C:(por exemplo) e ele seria executado no shell do Windows. Se eu pressionasse Ctrl-Ca saída, pararia e veria o comando digitado no shell do Windows nos bastidores. Muito estranho!
Mateus Leia
3

Ctrl+ \seguido por Entergeralmente funciona bem.

Isso enviará um sinal SIGQUIT que pode não ser apropriado para um servidor (despeja um arquivo principal por exemplo), mas não acho que seja um problema usá-lo em um telefone / tablet Android (que não despeja um arquivo principal por padrão ) Solução fácil que funciona na maioria dos casos.

dazweeja
fonte
3

No Windows, você pode simplesmente digitar [Alt] + [3] através do teclado numérico (não esqueça de pressionar enter depois).
Isso envia [Ctrl] + [c] para o shell, encerrando o comando atual:

D: \ Android> shell adb
$ cat
gato
♥
^ C

$ exit
Saída

D: \ Android>

Observe que [Alt] + [3] produz o ASCII-Char ♥ no Windows, que é igual ao ETX-Byte.
Você também pode pressionar [Alt] + [0] - [3] (mantenha a tecla Alt pressionada enquanto pressiona [0] e [3] no teclado numérico), se não usar as janelas para exibir um coração;)

Dralnaw
fonte