Corrigir Control-C no programa de linha de comando mysql?


10

Na mysqllinha de comando, pressionar Control-Cirá cancelar o programa e retornar ao bash. No psqlpostgres, ele mata a consulta atual e não para o programa psql. Existe alguma maneira de obter o comportamento do estilo psql Control-Cno programa mysql? Eu continuo me achando pressionado Control-Cpelo hábito e tendo que entrar novamente no mysql.

Control Cnão mata o bash e desconecta você quando pressioná-lo. O que eu acho que é uma coisa boa. Control-Csignifica 'pare o que você está fazendo'.

Respostas:


7

Se você pressionar Ctrl-C no 5.1 durante a execução da consulta , ela interromperá a execução com a mensagem "A execução da consulta foi interrompida"

    mysql> INSERT IN c SELECT rand () * 1000, sha1 (rand ()) FROM c;
    Consulta abortada por Ctrl + C
    ERRO 1317 (70100): A execução da consulta foi interrompida

Uma nova Ctrl-Cimprensa mata o cliente.

As versões mais antigas morrem horrivelmente, conforme observado na pergunta, então atualize se possível :)

Editar:

Parece que foi adicionado em 5.0.25 (e 5.1.10).


2
Ainda tem um comportamento bem estúpido. Quando você pressiona CTRL + C durante uma consulta, deve cancelar a consulta. Quando você pressiona CTRL + C no prompt, ele não deve fazer nada e NÃO sair do MySQL. Quando você pressiona CTRL + C no prompt do Bash quando nada está acontecendo, ele imprime uma nova linha, mas basicamente não faz nada.
1140 Neil

Na verdade, o que eu preferia fazer era exatamente o que o psql faz: se você está no meio da digitação de uma consulta, talvez já tenha inserido várias linhas, e percebe que cometeu um erro e deseja abortar a entrada, pressione CTRL + C deve voltar ao prompt.
harmic

Vou deixar claro: ctrl-C ainda o tira da CLI do mysql, mesmo na versão 5.5. A resposta de Andy é um pouco vaga (pelo menos para mim), mas se isso fez você sentir que as versões mais recentes corrigiam esse comportamento, você foi enganado.
ndemou 02/09

@ndemou em qual plataforma você está? Minha resposta foi testada no RHEL5.
Andy

@ Andy testado no ubuntu 12.04. Você está escrevendo "Parece que foi adicionado em 5.0.25". O que você acha que foi adicionado? Essa é a parte da sua resposta que não entendo. Veja também minha resposta abaixo.
Ndemou 10/09/14

13

Como Andy diz, é corrigido em versões posteriores.

Não há atalho de teclado equivalente nas versões anteriores.

Mas você pode impedir que isso aconteça com o seguinte sinalizador da CLI:

--sigint-ignore

Ignore SIGINT signals (typically the result of typing Control-C).

O problema é que --sigint-ignore também remove a capacidade de interromper consultas de longa execução. Oh! e nada relevante para a questão foi corrigido na versão posterior (<= 5.5) AFAICT. Veja minha resposta abaixo.
ndemou 14/09/14

5

Se você adicionar a \ c ao final da sua linha em vez de usar Ctrl-c, poderá eliminar a linha sem sair do mysql.


3

Resposta curta: Desde o início de 2014, não há como ter o comportamento descrito no mysql. Veja o relatório de erros relevante e uma página no dba.stackexchange, onde três pessoas diferentes comentam que ele ainda não foi corrigido na v5.5 . Além disso, até onde posso constatar, depois de uma longa pesquisa no Google, não há solução que valha a pena usar (veja abaixo o porquê --sigint-ignore não é bom). A resposta de Andy foi editada para mencionar que "parece que foi adicionado em 5.0.25 (e 5.1.10)". mas ele provavelmente foi enganado pelo comentário com a data [3 de maio de 2006 às 19:04] no relatório de erros acima mencionado.

O argumento --sigint-ignore (veja a resposta de Dan Carley) impedirá o mysql de levá-lo de volta ao shell quando você pressionar ctrl-C, mas também removerá a capacidade de interromper consultas demoradas .

Este é o tipo de bugs de usabilidade que fazem você ir :-( Realmente óbvio e provavelmente extremamente fácil de corrigir, mas ainda aqui está depois de muitos anos.

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.