rlwrap: mysql オートコンプリートが機能しない

rlwrap: mysql オートコンプリートが機能しない

通常、オートコンプリートはmysql-client-5.5mysqlコマンドラインクライアント()でうまく機能します。というテーブルがありますbooking。文字を入力しbてキーを押すと、TABテーブル名が自動補完されます。

SELECT * FROM b<TAB>

rlwrapただし、()を使用するとalias mysql='/usr/bin/rlwrap -s 99999 -a -pRED /usr/bin/mysql'オートコンプリート機能は機能しません。

rlwrapオートコンプリート機能に干渉するようです。

私はDebian Wheezyを使用しています。

アップデート1:

startコマンドを使用する場合strace、つまり:

strace /usr/bin/rlwrap -s 99999 -a -pRED /usr/bin/mysql --auto-rehash

次のエラーが表示されます。

access("/usr/share/rlwrap/completions/mysql", R_OK) = -1 ENOENT (No such file or directory)

rlwrapにmysqlを完成させるためにいくつかのファイルが必要な場合がありますか?

アップデート2

いいですね。ファイルを作成し、/usr/share/rlwrap/completions/mysqlその中に3つのサンプル行を入れました。

select
from
where

mysql入力を開始すると、sele<TAB>タブは実際に単語を完成させますselect。それは進歩ですが、問題全体を解決するわけではありません。覚えたくない(不要な)あいまいなテーブル名を完成させるのに役立つ自動補完機能が主に必要です。ただし、テーブルを変更/追加/名前変更するたびにオートコンプリートファイルを編集することはできません。

rlwrap同じオートコンプリートファイルを使用するように指示する方法はありませんかmysql? (mysqlそのようなファイルを使うべきだと思います)

アップデート3:

他のエラーは次のとおりです。strace

access("/etc/ld.so.nohwcap", F_OK)      = -1 ENOENT (No such file or directory)
access("/etc/ld.so.preload", R_OK)      = -1 ENOENT (No such file or directory)
access("/etc/ld.so.nohwcap", F_OK)      = -1 ENOENT (No such file or directory)
access("/etc/ld.so.nohwcap", F_OK)      = -1 ENOENT (No such file or directory)
access("/etc/ld.so.nohwcap", F_OK)      = -1 ENOENT (No such file or directory)
access("/etc/ld.so.nohwcap", F_OK)      = -1 ENOENT (No such file or directory)
access("/etc/ld.so.nohwcap", F_OK)      = -1 ENOENT (No such file or directory)
access("/etc/ld.so.nohwcap", F_OK)      = -1 ENOENT (No such file or directory)
stat("/home/martin/.terminfo", 0x7fff27ee6a70) = -1 ENOENT (No such file or directory)
access("/etc/terminfo/x/xterm-256color", R_OK) = -1 ENOENT (No such file or directory)
access("/home/martin/.mysql_completions", R_OK) = -1 ENOENT (No such file or directory)
access("/usr/share/rlwrap/completions/mysql", R_OK) = -1 ENOENT (No such file or directory)
connect(4, {sa_family=AF_FILE, path="/var/run/nscd/socket"}, 110) = -1 ENOENT (No such file or directory)
connect(4, {sa_family=AF_FILE, path="/var/run/nscd/socket"}, 110) = -1 ENOENT (No such file or directory)
access("/etc/ld.so.nohwcap", F_OK)      = -1 ENOENT (No such file or directory)
access("/etc/ld.so.nohwcap", F_OK)      = -1 ENOENT (No such file or directory)
access("/etc/ld.so.nohwcap", F_OK)      = -1 ENOENT (No such file or directory)
access("/etc/ld.so.nohwcap", F_OK)      = -1 ENOENT (No such file or directory)
stat("/home/martin/.inputrc", 0x7fff27ee7710) = -1 ENOENT (No such file or directory)

答え1

これにより、通常のmysqlサーバーで完了が可能になります。

mysql --auto-rehash

の場合、設定が完了しrlwrapたことを確認してくださいRLWRAP_HOME。バラよりここより多くの情報を知りたいです。このページもレポートシステム使用量が多すぎると、競合状態が発生する可能性があります。

答え2

編集するmy.cnf

[mysql]
auto-rehash

それでも機能しない場合は、追加してくださいdebian.cnf

あなたもできます:

mysql> \#

答え3

FreeBSDフォーラムでこれを見つけましたが、あなたの状況にも効果があります。フォーラム投稿のタイトルは次のとおりです。bashのmysqlにオートコンプリート機能がないのはなぜですか?

このスレッドで言及されているソリューションは次のとおりです。

オプション#1 - mysqlクライアント経由

$ mysql --auto-rehash -p

これはmysqlマニュアルページからすぐに来たものです。

--auto-rehash

Enable automatic rehashing. This option is on by default, which enables 
database, table, and column name completion. Use --disable-auto-rehash to 
disable rehashing. That causes mysql to start faster, but you must issue the 
rehash command if you want to use name completion.

To complete a name, enter the first part and press Tab. If the name is 
unambiguous, mysql completes it. Otherwise, you can press Tab again to see 
the possible names that begin with what you have typed so far. Completion 
does not occur if there is no default database.

オプション#2 - サーバー経由

サーバーファイル内の同じ機能行をコメントアウトして、サーバー側でこの問題を解決することもできます/etc/my.cnf。ファイルのソースによって異なりますmy.cnf。 MySQLは.cnfデフォルトでいくつかのサンプルファイルを提供します。

はい

これは私のCentOSシステムにあり、あなたのDebianシステムにもこれらの機能があるかもしれません。

$ rpm -ql mysql-server |grep cnf 
/usr/share/doc/mysql-server-5.0.95/my-huge.cnf
/usr/share/doc/mysql-server-5.0.95/my-innodb-heavy-4G.cnf
/usr/share/doc/mysql-server-5.0.95/my-large.cnf
/usr/share/doc/mysql-server-5.0.95/my-medium.cnf
/usr/share/doc/mysql-server-5.0.95/my-small.cnf
/usr/share/mysql/my-huge.cnf
/usr/share/mysql/my-innodb-heavy-4G.cnf
/usr/share/mysql/my-large.cnf
/usr/share/mysql/my-medium.cnf
/usr/share/mysql/my-small.cnf

これらのファイルのいずれかがあなたのファイルの基礎である場合は、/etc/my.cnfそのファイルでこの行を有効にすることができます。たとえば、次のファイルで有効になっています。

$ grep rehash /usr/share/doc/mysql-server-5.0.95/*
/usr/share/doc/mysql-server-5.0.95/my-huge.cnf:no-auto-rehash
/usr/share/doc/mysql-server-5.0.95/my-innodb-heavy-4G.cnf:no-auto-rehash
/usr/share/doc/mysql-server-5.0.95/my-large.cnf:no-auto-rehash
/usr/share/doc/mysql-server-5.0.95/my-medium.cnf:no-auto-rehash
/usr/share/doc/mysql-server-5.0.95/my-small.cnf:no-auto-rehash

したがって、ファイルでその行を有効にした場合は、/etc/my.cnf次のようにその行をコメントアウトする必要があります。

#no-auto-rehash

あなたのエイリアス

mysqlクライアントの呼び出しに使用する方法がある場合は、次のようにスイッチを追加できrlwrapます。--auto-hash -p

$ alias mysql='/usr/bin/rlwrap -s 99999 -a -pRED /usr/bin/mysql --auto-rehash -p'

関連情報