MySQLコンソール:Ctrl + Cで私を動かす


24

MySQLコンソールには、私を夢中にさせる何かがあります。私がヒットするとctrl+をc、現在のコマンドをキャンセルするために、ターミナルの出口を入力しています。

すべてのターミナルIのノウハウで(*nix端末、PythonPostgreSQL)、ctrl+はc現在のコマンドをキャンセルし、ctrl+ dターミナルを終了します。

この問題は2003年報告されて以来、何度か衝突しています。

次の方法があります:

  • この動作を変更する、または
  • MySQL開発チームにこれが本当に面倒だと確信させますか?

回答:


6

動作を変更するには、mysql CLIのソースをダウンロードし、必要にSIGINT応じて動作するようにハンドラーを変更してから、再コンパイルしてインストールします。


1
これは潜在的に危険ではありませんか?将来のバージョンで機能するという保証はありません。さらに、それはうまくいくように見えますが、後でまったく関係のない場所で奇妙な動作が発生しないことをどのように知っていますか?
Pacerier

21

少なくともクライアントのバージョン5.6.14には、SIGINTハンドラーを完全に無視する--sigint-ignoreオプションがあります。されているように見えます追加 10月7日、2004年-それは、少なくともしばらくの周りされていますので。私はそれをテストしましたが、CTRL-CがMySQLクライアントをキャンセルしないようにします。ただし、PostgreSQL CLIのように、CTRL-CでBASHシェルのように現在のコマンドラインバッファーもキャンセルすると便利です。そのようなものを実装することがどれほど難しいかを知るために、MySQLを分岐させました。準備ができたら/ホームボール式のtarballリンクを投稿します。

更新1 その日のいずれかがありますか?約束のパッチを作成し、それを示すビデオを作成することにしました。出来た!ただし、無効にできませんでした!さて、MySQLは昨年、実際にコアクライアントに機能を組み込みました。はい、このQのAは、少なくともMySQL 5.7.3-794-g901d27fのクライアントをダウンロードすることです。それは私たち全員が望む機能を備えています。

コマンドラインから--sigint-ignoreフラグを追加するだけです:

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

または、私がやったように、次のコンテンツで$HOME/.my.cnf%USERPROFILE%/.my.cnfWindowsの)ユーザーアカウントのMySQL構成ファイルを作成します。

[mysql]
sigint-ignore=TRUE

これにより、すべてのmysql実行で迷惑なCtrl-Cが無視され、適切なSQLクライアントのように動作します。


19

一方でctrl+のc行動は迷惑です、あなたはまだ使用することができ\c、現在のクエリをキャンセルします。mysql CLIを使用するときは、\c代わりにctrl+ c


1
このアイデアを思いついたのは誰ですか?彼の頭が欲しい。
Pacerier

1
また、Ctrl + Uを使用して行の先頭まで削除し、Ctrl + Wを使用して1語分後方に削除することもできます。
ダミアンÓCeallaigh 16年

9

朗報:MySQLの^ C機能は#66583でようやく修正されました

5.7.0の変更ログから:

以前は、mysqlのControl + Cは、現在のステートメントがあればそれを中断し、そうでなければmysqlを終了しました。現在、Control + Cは現在のステートメントがあればそれを中断し、そうでない場合は部分的な入力行をキャンセルしますが、終了しません。


5.6.35を使用していますが、これが問題ではないことを確認しました。
flow2k

1

使用しているクライアントのバージョンは何ですか?これは古い動作であることを覚えていますが、5.1と5.5の最近のバージョンは、クライアントを終了せずに実行中のコマンドをキャンセルするようです。それから、Perconaビルドを使用している可能性があります。その場合は、クライアントを実行してみてください。


うーん、私は5.5 Perconaを実行していますが、ctrl + cはまだ(現在のsqlコマンドではなく)mysqlクライアントを中止します
デレクダウニー

OPを読み間違えたと思います。私の応答は、まだ実行されていないコマンドを空白にすることではなく、実行中のコマンドに対処することでした。
-atxdba

@atxdbaに同意します-5.5のPerconaビルドも実行していますが、ctrl + cは現在実行中のコマンドから脱落します。実行中のコマンドがない場合、CLIからドロップアウトします。実行中のシェルからctrl + dがドロップアウトする可能性がありますが、シェル内でスクリプトを実行している場合、ctrl + c ...を押すと停止します...異なるアプリ/シェル/スクリプトに対して異なるコマンド!〜S:...混乱することができます
デイブリックス

@DaveRix私も同意します。ctrl+ cは現在実行中のクエリから除外されます。しかし、残念なことに、OPはそれについて説明していません。
デレクダウニー
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.