Исправить 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 убивает клиента.
Старые версии ужасно умирают, как отмечено в вопросе, поэтому обновите, если это возможно:)
Редактировать:
Как говорит Энди, это исправлено в более поздних версиях.
В более старых версиях нет аналогичного сочетания клавиш.
Но вы можете предотвратить это с помощью следующего флага 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, но также уберет возможность останавливать долго выполняющиеся запросы.
Это тот тип ошибок юзабилити, который заставляет вас идти вперед:-(Действительно очевиден и, вероятно, чрезвычайно легко исправить, но все же он есть через много лет.