コンソールでのmysql-clientの出力の色付け

色と音は、コンソールを常に操作しながら、管理者の平日を飾り、促進できる小さな喜びです。 色情報の出力は、いわゆるエスケープシーケンスによって規制されます。エスケープシーケンスは、特にテキストの色と背景色を決定します。

一般ビュー: \033[Xm 、Xはパラメーター値(数字)です。 たとえば、 echo -ne "\033[34mHELLO"は "HELLO"を青で表示します。 色とその他の利用可能なパラメーター(下線、点滅など)の表は、ECMA-48 Set Graphics Renditionセクションのman console_codesドキュメントにあります。 通常、色のサポートはアプリケーション自体に統合されていますが、mysql-clientはこれらのプログラムの1つではありません。

インターネットでは、mysqlコンソールを装飾するという質問に何度も出会ったが、どこにもレシピはなかった。 「ラッパーになる」または「ソースコードを調べる」という一般的な単語のみ。 StackOverflowに関するこのような質問は、2年以上も答えられずに生き続けてきました! 「Lived」は、答えが見つかったため、過去形で特別に使用されました。

grcユーティリティが役立ちます。 ほとんどのディストリビューションで利用でき、多くの人が知っています。 しかし、mysql-clientの出力をラップする方法は?



grcユーティリティ(Generic Colorizer)は、実際には、指定されたコマンドを実行し、構成に従ってgrcatに出力を送るgrcatのラッパーです。 grcatを直接必要とします。grcatには、構成が書き込まれ、小さなmysql-client構成も書き込まれます。

mysql-clientの出力を単にgrcatに送信することの問題は何ですか? または単にgrc mysql使用します...? mysql-clientがコマンドの呼び出し元の環境を認識すること。 インタラクティブに使用される場合、表形式のマークアップが表示されます。 呼び出しがスクリプトから行われた場合、またはデータストリームが別のプログラムに送信された場合、出力からテーブルレイアウトを削除し、タブを使用します。 簡単な例:

 $ mysql test -e "select * from test_table" +----+-------+ | id | value | +----+-------+ | 1 | a | +----+-------+ 


 $ mysql temp -e "select * from test_table" | cat - id value 1 a 


最初のケースでは、コンソールの出力を使用し、テーブルが表示されます。 2番目では、catを介して出力をリダイレクトしますが、テーブルは魔法のように消えます。

ユーザーのtruezemezが 解説示唆したように、テーブル出力は--tableオプションを使用して保存できます。 この場合、出力をgrcにリダイレクトすることもできます。

そして、 黒いマントがmysqlのドキュメントを読んで救いに来ます。 mysql-clientでは、画面に結果を表示するPAGERパラメーターを設定できます。 そこでgrcatを記述して使用します。 構成ファイルを指定することを忘れないでください。 〜/ .my.cnfファイルのスニペットを次に示します。

 [mysql] pager = grcat ~/.grcat 


設定でPAGERを設定する必要はありません。毎回手で入力できますが、これはアマチュアです

 mysql> pager grcat ~/.grcat PAGER set to 'grcat ~/.grcat' 


私たちがやるべきことは、出力中にmysqlテーブルを認識し、配色を適用するようにgrcatの設定を発行することだけです。 〜/ .grcatパスに沿って検索する必要があることを上記で示しました。 構成はパラメーターのグループで構成され、正規表現と色が必要です。 パラメーターはマイナスで区切られ、ラティスはコメントです。 ユーティリティは、正規表現が現在の行と一致するかどうかを確認し、指定した色を一致の結果に適用します。 パラメーターcount=stopが構成で指定されている場合、正規表現が一致すると、プログラムは出力テキストの次の行に進みます。 count=stopがない場合count=stopこれらの設定は順番に適用されます。 そのような構成は次のとおりです。

 #        \G regexp=[*]+.+[*]+ count=stop colours=white - #  regexp=[+\-|]+ colours=red - #    regexp=[\w\.]+ colours=green - #   ( )   ' ' regexp=\([\w\d,']+\) colours=white - # regexp=\s[\d\.]+\s colours=yellow - #       \G regexp=\w+: colours=white - # regexp=\d{4}-\d{2}-\d{2}\s\d{2}:\d{2}:\d{2} colours=cyan - #IP regexp=(\d{1,3}\.){3}\d{1,3}(:\d{1,5})? colours=cyan - #,        ` ` regexp=`\w+` colours=yellow - #email regexp=[\w\.\-_]+@[\w\.\-_]+ colours=magenta 


grcatユーティリティ自体はpythonで書かれており、アマチュアはコードをスパイし、必要に応じて設定を書くことができます。 残りについては、 man grcドキュメントと、 サンプル付きの優れたチュートリアルがあります。

構成ファイルはgithubで入手できます。 StackOverflowに関する上記の質問への回答には、同じリンクが提供されています

また、mysql-clientの利点:

結果を水平にスクロール
(実際には、垂直も)ユーザーnektDaedmenのヒントで:
pager = grcat ~/.grcat | less -RS
-Sフラグは水平スクロールをアクティブにし、-Rは色をスクロールします。

ユーザーwickedweaselのおかげで、より興味深いフラグが少なくなりました
-Fは、すべてが1つの画面に収まる場合は終了しません
-i検索するケースを無視
-nは行番号を削除します
-Xはlessを終了した後に画面をクリアしません。これはコンソールで便利です-前のリクエストの結果を見ることができます

ページャーで他にできること:
www.mysqlperformanceblog.com/2008/06/23/neat-tricks-for-the-mysql-command-line-pager
mysql-clientで便利な挨拶を設定する:
www.ultraquantix.com/blog/2008/12/making-the-mysql-prompt-more-useful

Source: https://habr.com/ru/post/J151406/


All Articles