Исправить 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> INSERT INTO c SELECT rand () * 1000, sha1 (rand ()) FROM c;
    Запрос прерван по 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 по- прежнему выводит вас из CLI mysql даже в версии 5.5. Ответ Энди немного расплывчатый (по крайней мере для меня), но если это заставило вас почувствовать, что более новые версии исправили это поведение, вы были введены в заблуждение.
ndemou

@ndemou, на какой ты платформе? Мой ответ был проверен на RHEL5.
Энди

@Анди тестировал на 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. Смотрите мой ответ ниже.
14:00

5

Если вы добавите \ c к концу вашей строки вместо Ctrl-c, вы можете убить строку, не выходя из mysql.


3

Краткий ответ: С начала 2014 года описанного поведения в mysql не существует. Смотрите соответствующий отчет об ошибке и страницу в dba.stackexchange, где 3 разных человека комментируют, что это все еще не исправлено в v5.5 . Кроме того, насколько я могу судить, после долгого поиска в Google нет никакого обходного пути, которое стоит использовать (см. Ниже, почему --sigint-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.