Консоль MySQL: Ctrl + C веде мене на гайки


24

У консолі MySQL є щось, що наводить мене на гайки. Коли я натискаю ctrl+, cщоб скасувати поточну команду, що вводиться, термінал виходить.

У кожному терміналі я знаю ( *nixтермінали Python, PostgreSQL), ctrl+ cскасовує поточну команду і ctrl+ dвиходить з терміналу.

Про це питання повідомлялося в 2003 році , і з тих пір натрапляли на кілька разів.

Чи є спосіб:

  • Змініть цю поведінку або
  • Переконати команду розробників MySQL, що це насправді дратує?

Відповіді:


6

Щоб змінити поведінку, завантажте джерело для mysql CLI та змініть SIGINTобробник так, як вам здається, потім перекомпілюйте та встановіть.


1
Чи це не потенційно небезпечно? Немає гарантій, що він буде працювати для майбутніх версій. Плюс , схоже, це спрацювало б, але як би ти знав, що пізніше ти не отримаєш якоїсь дивної поведінки у зовсім незв'язаному місці?
Пейсьєр

21

Принаймні версія 5.6.14 клієнта має можливість --sigint-ignore, щоб повністю ігнорувати обробник SIGINT. Здається, було додано 7 жовтня 2004 року - так що, як мінімум, минуло деякий час. Я щойно тестував це, і це не дозволяє CTRL-C відміняти клієнт MySQL. Однак було б добре, якщо CTRL-C також скасує поточний буфер командного рядка, як це робиться в оболонці BASH - як це робить CLI PostgreSQL. Я розпрощав MySQL, щоб побачити, як важко було б реалізувати щось таке. Я опублікую формулу Homebrew із посиланням на тарбол, коли / якщо вона буде готова.

ОНОВЛЕННЯ 1 У вас був один із цих днів? Я створив обіцяний патч , а потім вирішив створити відео, щоб продемонструвати його. Це спрацювало! Однак я не зміг її відключити! Що ж, виявляється, що MySQL насправді випустив у функціонал основний клієнт минулого року ! Так, A до цього Q - це завантажити хоча б клієнта MySQL 5.7.3-794-g901d27f. Він має функціонал, який ми всі бажали.

ПРИКЛАД З командного рядка просто додайте прапор --sigint-ignore:

mysql --host=127.0.0.1 --port=8900 --user=root -p --sigint-ignore DBNAME

Або, як я це зробив, і створити конфігураційний файл MySQL для вашого облікового запису користувача в $HOME/.my.cnf( %USERPROFILE%/.my.cnfу Windows) із наступним вмістом:

[mysql]
sigint-ignore=TRUE

Це забезпечить, що всі mysqlстрати ігнорують дратівливий Ctrl-C і поводяться як хороший клієнт SQL.


19

Хоча поведінка ctrl+ cдратує, ви все одно можете використовувати \cдля скасування поточного запиту. Ви просто повинні навчити себе, що при використанні mysql CLI ви використовуєте \cзамість ctrl+ c!


1
Хто той хлопець, який придумав цю ідею? Ми хочемо його голову.
Pacerier

1
Ви також можете використовувати Ctrl + U для видалення до початку рядка, а Ctrl + W - для видалення одного слова назад.
Дамьєн Ó Ceallaigh

9

Хороша новина: функціональність ^ C MySQL остаточно виправлена ​​на # 66583 .

Із журналу змін 5.7.0 :

Раніше Control + C в mysql перервав поточний оператор, якщо він був, або вийшов з mysql, якщо ні. Тепер Control + C перериває поточний оператор, якщо він був, або скасовує будь-яку часткову рядок вводу в іншому випадку, але не виходить.


Я використовую 5.6.35 і підтвердив, що це не проблема.
flow2k

1

Яку версію клієнта ви використовуєте? Я пам’ятаю, що це було старшою поведінкою, але останні версії 5.1 і 5.5, здається, просто скасовують запущену команду, не виходячи з клієнта. Знову ж таки, можливо, я використовую конструкції Percona. Ви можете спробувати просто запустити їх клієнта, якщо це так.


хм, я запускаю 5,5 Percona і ctrl + c досі перериває клієнт mysql (не поточну команду sql)
Дерек Дауні

Я думаю, що я неправильно прочитав ОП. У моїй відповіді було звернення до команди, яка була в середині виконання, а не бажання опустити вас ще командою, яку потрібно виконати.
atxdba

Я погоджуюся з @atxdba - я також виконую збірку Percona 5,5, і ctrl + c випадає з команди, що виконується в даний час. Якщо команда не виконується, вона випадає з CLI. Можливо, ctrl + d випадає із запущеної оболонки, але якщо у вас є сценарій, який працює в оболонці, він зупиняється, якщо ви натиснете ctrl + c ... різні команди для різних додатків / оболонок / скриптів! Може бути заплутаним ...: ~ s
Дейв Рікс

@DaveRix Я теж погоджуюся, ctrl + c випадає із запиту, який зараз виконується. Але, на жаль, це не те, про що йдеться в ОП.
Дерек Дауні
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.