Виправити Control-C у програмі командного рядка mysql?


10

У mysqlкомандному рядку натискання Control-Cскасує програму та поверне вас до bash. У тому psql, що є для postgres, він знищить поточний запит і не зупинить програму psql. Чи є спосіб отримати поведінку стилю psql Control-Cв програмі mysql? Я продовжую знаходити себе на тиску Control-Cза звичкою і мені потрібно увійти в mysql.

Control Cне вбиває bash, і вийдіть із системи, коли ви натиснете на нього Я думаю, що це добре. Control-Cозначає «припиніть, що ви робите».

Відповіді:


7

Якщо натиснути Ctrl-C в 5.1 під час виконання запиту , він зупинить виконання повідомленням "Виконання запиту було перервано"

    mysql> ВСТАВИТИ c ВИБРАТИ rand () * 1000, sha1 (rand ()) ВІД c;
    Запит перервано BY Ctrl + C
    ПОМИЛКА 1317 (70100): виконання запиту було перервано

Подальша Ctrl-Cпреса вбиває клієнта.

Старіші версії гинуть жахливо, як зазначено в питанні, тому оновлення, якщо можливо, :)

Редагувати:

Схоже, його додано в 5.0.25 (та 5.1.10).


2
Він все ще має досить тупу поведінку. Коли ви натискаєте CTRL + C під час запиту, він повинен скасувати запит. Якщо ви натискаєте CTRL + C у запиті, він нічого не повинен робити і НЕ виходити з MySQL. Коли CTRL + C підказує на запит Bash, коли нічого не відбувається, він друкує новий рядок, але в основному нічого не робить.
Ніл

Насправді, те, що я хотів би зробити це, було саме те, що робить psql: якщо ви вже на півдорозі вводите запит, можливо, ввівши вже кілька рядків, і ви розумієте, що ви помилилися і хочете відмінити його, натиснувши CTRL + C повинен повернутись до підказки.
шкідливий

Я зрозумію: ctrl-C все ще виводить вас з mysql CLI навіть у версії 5.5. Відповідь Енді трохи розпливчаста (як мінімум, для мене), але якщо ви змусили вас відчути, що нові версії виправляють таку поведінку, вас ввели в оману.
ndemou

@ndemou на якій платформі ти працюєш? Мою відповідь було перевірено на RHEL5.
Енді

@Andy перевірено на ubuntu 12.04. Ви пишете "Схоже, це було додано в 5.0.25". Як ви думаєте, що було додано? Це та частина вашої відповіді, яку ідони не розуміють. Дивіться також мою відповідь нижче.
ndemou

13

Як каже Енді, це фіксується в пізніших версіях.

У старих версіях немає еквівалентного комбінації клавіш.

Але ви можете запобігти цьому з наступним прапором CLI:

--sigint-ignore

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

Проблема полягає в тому, що --sigint-ignore також видаляє можливість зупиняти тривалі запити. Ой! і нічого, що стосується питання, не було зафіксовано в більш пізній версії (<= 5.5) AFAICT. Дивіться мою відповідь нижче.
ndemou

5

Якщо ви додасте \ c до кінця рядка замість використання Ctrl-c, ви можете вбити рядок, не виходячи з mysql.


3

Коротка відповідь: На початок 2014 року описана поведінка в mysql не існує. Дивіться відповідний звіт про помилку та сторінку в dba.stackexchange, де 3 різні люди коментують, що він досі не зафіксований у v5.5 . Крім того, наскільки я можу сказати, після тривалого гуглінгу немає вирішення, яке варто використовувати (див. Нижче, чому --igig-ignore - це не добре). Відповідь Енді була відредагована, зазначивши, що "Схоже, це було додано в 5.0.25 (та 5.1.10)". але його, ймовірно, ввели в оману з датою [3 травня 2006 19:04] у вищезгаданому звіті про помилку.

Аргумент --sigint-ignore (див. Відповідь Дена Карлі) дійсно зупинить mysql від того, щоб повернути вас до оболонки, коли ви натиснете ctrl-C, але також видалить можливість зупиняти довгі запущені запити .

Цей вигляд помилок у використанні змушує вас виїхати :-( По-справжньому очевидний і, ймовірно, надзвичайно простий у виправленні, але все-таки це є через багато років.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.