Correction de Control-C dans le programme de ligne de commande mysql?


10

Dans la mysqlligne de commande, appuyer sur Control-Cannulera le programme et vous ramènera à bash. Dans psql, celui pour postgres, il tuera la requête en cours et n'arrêtera pas le programme psql. Existe-t-il un moyen d'obtenir le comportement de style psql Control-Cdans le programme mysql? Je n'arrête pas de me presser Control-Cpar habitude et de devoir me reconnecter à mysql.

Control Cne tue pas bash et vous déconnecte lorsque vous appuyez dessus. Je pense que c'est une bonne chose. Control-Csignifie «arrêtez ce que vous faites».

Réponses:


7

Si vous appuyez sur Ctrl-C en 5.1 pendant l'exécution de la requête , cela interrompra l'exécution avec le message "L'exécution de la requête a été interrompue"

    mysql> INSERT INTO c SELECT rand () * 1000, sha1 (rand ()) FROM c;
    Requête abandonnée PAR Ctrl + C
    ERREUR 1317 (70100): l'exécution de la requête a été interrompue

Une nouvelle Ctrl-Cpression tue le client.

Les anciennes versions meurent horriblement comme indiqué en question, alors mettez à niveau si possible :)

Éditer:

On dirait qu'il a été ajouté dans 5.0.25 (et 5.1.10).


2
Il a toujours un comportement assez stupide. Lorsque vous appuyez sur CTRL + C pendant une requête, il doit annuler la requête. Lorsque vous appuyez sur CTRL + C à l'invite, cela ne devrait rien faire et NE PAS quitter MySQL. Lorsque vous CTRL + C à l'invite Bash lorsque rien ne se passe, il imprime une nouvelle ligne, mais ne fait rien.
Neil

En fait, ce que je préfère, c'est exactement ce que fait psql: si vous êtes à mi-chemin de la saisie d'une requête, peut-être que vous avez déjà entré plusieurs lignes et que vous vous rendez compte que vous avez fait une erreur et que vous souhaitez abandonner la saisie, puis appuyez sur CTRL + C devrait revenir à l'invite.
harmic

Je ferai clairement: ctrl-C encore des gouttes de vous mysql CLI même à la version 5.5. La réponse d'Andy est un peu vague (du moins pour moi) mais si cela vous faisait sentir que les nouvelles versions corrigeaient ce comportement, vous avez été induit en erreur.
ndemou

@ndemou sur quelle plateforme êtes-vous? Ma réponse a été testée sur RHEL5.
Andy

@Andy testé sur Ubuntu 12.04. Vous écrivez "On dirait qu'il a été ajouté en 5.0.25". Que pensez-vous a été ajouté? C'est la partie de votre réponse que je ne comprends pas. Voir aussi ma réponse ci-dessous.
ndemou

13

Comme Andy le dit, il est corrigé dans les versions ultérieures.

Il n'y a pas de raccourci clavier équivalent dans les anciennes versions.

Mais vous pouvez l'empêcher de se produire avec l'indicateur CLI suivant:

--sigint-ignore

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

Le hic est que --sigint-ignore supprime également la possibilité d'arrêter les requêtes de longue durée. Oh! et rien de pertinent à la question n'a été corrigé dans la version ultérieure (<= 5.5) AFAICT. Voir ma réponse ci-dessous.
ndemou du

5

Si vous ajoutez un \ c à la fin de votre ligne au lieu d'utiliser Ctrl-c, vous pouvez tuer la ligne sans quitter mysql.


3

Réponse courte: au début de 2014, il n'y avait aucun moyen d'avoir le comportement décrit dans mysql. Voir le rapport de bogue pertinent et une page dans dba.stackexchange où 3 personnes différentes commentent que ce n'est toujours pas corrigé dans la v5.5 . Aussi loin que je sache, après une longue recherche sur Google, il n'y a aucune solution de contournement à utiliser (voir ci-dessous pourquoi --sigint-ignore n'est pas bon). La réponse d'Andy a été modifiée pour mentionner que "On dirait qu'elle a été ajoutée dans 5.0.25 (et 5.1.10)." mais il a probablement été induit en erreur par un commentaire avec la date [3 mai 2006 19:04] dans le rapport de bogue susmentionné.

L'argument --sigint-ignore (voir la réponse de Dan Carley) empêchera en effet mysql de vous renvoyer vers le shell lorsque vous appuyez sur ctrl-C mais supprimera également la possibilité d'arrêter les requêtes de longue durée .

C'est le genre de bugs d'utilisation qui vous font avancer :-( Vraiment évident et probablement extrêmement facile à corriger, mais il est toujours là après de nombreuses années.

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.