Console MySQL: Ctrl + C me deixando louco


24

Há algo no console do MySQL que me deixa louco. Quando pressiono ctrl+ cpara cancelar o comando atual que está sendo digitado, o terminal sai.

Em cada I Know terminal ( *nixterminais, Python, PostgreSQL), ctrl+ ccancela o comando atual e ctrl+ dsai do terminal.

Esse problema foi relatado em 2003 e passou várias vezes desde então.

Existe uma maneira de:

  • Alterar esse comportamento ou
  • Convencer a equipe de desenvolvimento do MySQL de que isso é realmente irritante?

Respostas:


6

Para mudar o comportamento, faça o download da fonte da CLI do mysql e modifique o SIGINTmanipulador para se comportar como achar melhor, depois recompile e instale.


1
Isso não é potencialmente perigoso? Não há garantia de que funcione para versões futuras. Além disso , parece que funcionaria, mas como você saberia que não teria um comportamento estranho em um lugar totalmente não relacionado mais tarde?
Pacerier

21

Pelo menos a versão 5.6.14 do cliente possui a opção --sigint-ignore para ignorar totalmente o manipulador SIGINT. Parece ter sido adicionado em 7 de outubro de 2004 - então já faz algum tempo. Acabei de o testar e impede o CTRL-C de cancelar o cliente MySQL. No entanto, seria bom se o CTRL-C também cancelasse o buffer da linha de comando atual, como no shell BASH - como a CLI do PostgreSQL. Eu peguei o MySQL para ver como seria difícil implementar algo assim. Vou postar uma fórmula Homebrew com um link de tarball quando / se estiver pronto.

ATUALIZAÇÃO 1 Você já teve um daqueles dias? Criei o patch prometido e decidi criar um vídeo para demonstrá-lo. Funcionou! No entanto, não consegui desativá-lo! Bem, acontece que o MySQL realmente incorporou a funcionalidade ao cliente principal no ano passado ! Sim, o A deste Q é baixar pelo menos o cliente do MySQL 5.7.3-794-g901d27f. Tem a funcionalidade que todos desejamos.

EXEMPLO Na linha de comando, adicione o sinalizador --sigint-ignore:

mysql --host=127.0.0.1 --port=8900 --user=root -p --sigint-ignore DBNAME

Ou faça o que eu fiz e crie um arquivo de configuração do MySQL para sua conta de usuário em $HOME/.my.cnf( %USERPROFILE%/.my.cnfno Windows) com o seguinte conteúdo:

[mysql]
sigint-ignore=TRUE

Isso garantirá que todas as mysqlexecuções ignorem o Ctrl-C irritante e se comportem como um bom cliente SQL.


19

Enquanto o comportamento ctrl+ cé irritante, você ainda pode usar \cpara cancelar a consulta atual. Você apenas precisa treinar para si mesmo que, ao usar o mysql CLI, usa em \cvez de ctrl+ c!


1
Quem é o cara que teve essa ideia? Nós queremos a cabeça dele.
Pacerier 10/01

1
Você também pode usar Ctrl + U para excluir o início da linha e Ctrl + W para excluir uma palavra para trás.
Damien Ó Ceallaigh

9

Boas notícias: a funcionalidade ^ C do MySQL foi finalmente corrigida pelo # 66583 .

No log de alterações 5.7.0 :

Anteriormente, Control + C no mysql interrompia a instrução atual, se houvesse, ou saiu do mysql, se não. Agora Control + C interrompe a instrução atual se houver uma ou cancela qualquer linha de entrada parcial, caso contrário, mas não sai.


Estou usando a versão 5.6.35 e verifiquei que isso não é um problema.
flow2k

1

Qual versão do cliente você está usando? Lembro que esse era o comportamento mais antigo, mas as versões recentes do 5.1 e 5.5 parecem apenas cancelar o comando em execução sem sair do cliente. Por outro lado, pode ser que eu esteja usando as compilações Percona. Você pode tentar executar o cliente deles, se esse for o caso.


hmm, eu estou correndo 5,5 Percona e ctrl + c ainda aborta o cliente mysql (não o atual comando sql)
Derek Downey

Eu acho que interpretei mal o OP. Minha resposta foi abordar um comando que estava no meio da execução, não o desejo de deixar em branco um comando ainda a ser executado.
Atxdba

Concordo com o @atxdba - também estou executando a compilação Percona da 5.5 e ctrl + c sai do comando em execução no momento. Se não houver nenhum comando em execução, ele sai da CLI. Pode ser que ctrl + d saia de um shell em execução, mas se você tiver um script em execução, ele será interrompido se você pressionar ctrl + c ... comandos diferentes para aplicativos / shells / scripts diferentes! Pode ser confuso ...: ~ s
Dave Rix

@DaveRix Concordo também, ctrl + c sai de uma consulta que está sendo executada no momento. Infelizmente, não era disso que se tratava o OP.
Derek Downey
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.