¿Arreglar Control-C en el programa de línea de comando mysql?


10

En la mysqllínea de comando, presionar Control-Ccancelará el programa y lo llevará de regreso a bash. En psql, el de postgres, matará la consulta actual y no detendrá el programa psql. ¿Hay alguna forma de obtener el comportamiento de estilo psql Control-Cen el programa mysql? Sigo encontrándome presionando Control-Cpor hábito y teniendo que volver a iniciar sesión en mysql.

Control Cno mata a bash y cierra la sesión cuando lo presiona. Lo cual creo que es algo bueno. Control-Csignifica 'deja lo que estás haciendo'.

Respuestas:


7

Si presiona Ctrl-C en 5.1 durante la ejecución de la consulta , se detendrá la ejecución con el mensaje "Se interrumpió la ejecución de la consulta"

    mysql> INSERTAR EN c SELECCIONAR rand () * 1000, sha1 (rand ()) DESDE c;
    Consulta cancelada por Ctrl + C
    ERROR 1317 (70100): se interrumpió la ejecución de la consulta

Una nueva Ctrl-Cpresión mata al cliente.

Las versiones anteriores mueren horriblemente como se señaló en la pregunta, así que actualice si es posible :)

Editar:

Parece que se agregó en 5.0.25 (y 5.1.10).


2
Todavía tiene un comportamiento bastante estúpido. Cuando presiona CTRL + C durante una consulta, debe cancelar la consulta. Cuando presiona CTRL + C en el indicador, no debe hacer nada y NO salir de MySQL. Cuando CTRL + C en el indicador Bash cuando no sucede nada, imprime una nueva línea, pero básicamente no hace nada.
Neil

En realidad, lo que preferiría que hiciera es exactamente lo que hace psql: si está a medio camino de ingresar una consulta, tal vez ya haya ingresado varias líneas, y se dé cuenta de que ha cometido un error y desea cancelar el ingreso, luego presione CTRL + C debería volver al aviso.
harmic

Lo dejaré claro: ctrl-C todavía lo saca de la CLI de mysql incluso en la versión 5.5. La respuesta de Andy es un poco vaga (al menos para mí), pero si te hizo sentir que las versiones más nuevas corrigieron este comportamiento, te han engañado.
ndemou

@ndemou ¿en qué plataforma estás? Mi respuesta fue probada en RHEL5.
Andy

@Andy probado en ubuntu 12.04. Está escribiendo "Parece que se agregó en 5.0.25". ¿Qué crees que se agregó? Esa es la parte de tu respuesta que no entiendo. Vea también mi respuesta a continuación.
ndemou

13

Como Andy dice, está arreglado en versiones posteriores.

No hay un método abreviado de teclado equivalente en versiones anteriores.

Pero puede evitar que suceda con el siguiente indicador de CLI:

--sigint-ignore

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

El problema es que --sigint-ignore también elimina la capacidad de detener consultas de larga duración. Oh! y nada relevante a la pregunta se ha solucionado en la versión posterior (<= 5.5) AFAICT. Mira mi respuesta a continuación.
ndemou

5

Si agrega un \ c al final de su línea en lugar de usar Ctrl-c, puede eliminar la línea sin salir de mysql.


3

Respuesta corta: a principios de 2014 no hay forma de tener el comportamiento descrito en mysql. Vea el informe de error relevante y una página en dba.stackexchange donde 3 personas diferentes comentan que todavía no se solucionó en v5.5 . Además, por lo que puedo decir después de un largo google, no hay una solución que valga la pena usar (vea a continuación por qué --sigint-ignore no es bueno). La respuesta de Andy fue editada para mencionar que "Parece que se agregó en 5.0.25 (y 5.1.10)". pero probablemente fue engañado por comentarios con fecha [3 de mayo de 2006 19:04] en el informe de error antes mencionado.

El argumento --sigint-ignore (ver la respuesta de Dan Carley) de hecho evitará que mysql lo deje caer nuevamente al shell cuando presione ctrl-C, pero también eliminará la capacidad de detener consultas de larga duración .

Este es el tipo de errores de usabilidad que te hacen ir :-( Realmente obvio y probablemente extremadamente fácil de solucionar, pero aún aquí está después de muchos años.

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.