Исправить Control-C в программе командной строки mysql?

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

Control C не убивает bash и выходит из системы при нажатии. Что я считаю хорошей вещью. Control-C означает "остановить то, что вы делаете".

4 ответа

Решение

Если вы нажмете 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).

Как говорит Энди, это исправлено в более поздних версиях.

В более старых версиях нет аналогичного сочетания клавиш.

Но вы можете предотвратить это с помощью следующего флага CLI:

--sigint-ignore

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

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

Краткий ответ: С начала 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, но также уберет возможность останавливать долго выполняющиеся запросы.

Это тот тип ошибок юзабилити, который заставляет вас идти вперед:-(Действительно очевиден и, вероятно, чрезвычайно легко исправить, но все же он есть через много лет.

Другие вопросы по тегам