MySQLコマンドラインの色プロンプト


22

MySQLコマンドラインの色プロンプトに色を追加したい。

私はこれまでのところスクリプト(database.sh)にあります:

mysql -uroot -hlocalhost -A --prompt="\u@\h:\d> "

私が希望rootする@であることをlocalhostであることをdatabaseするシアン

root@localhost:database>

私のスクリプトでこれを行うことは可能ですか?



1
私はそれを見たが、それは動作しません
-EscoMaji

ええ、通常のシェルプロンプトと同じ方法で可能だと思います。最善の策は、おそらく何らかのラッパーまたはより高度なMySQLクライアントです。
ミッケ

1
セットアップはANSIエスケープコードをサポートしていますか?その場合、次のように使用できます。--prompt = "^ [[1; 33mDTHIS PART IS IN YELLOW COLOUR ^ [[0m \ u @ \ h:\ d>"
Hennes

回答:


14

できないと言う人の話を聞かないでください。ここに:

$ alias colormysql=$(echo -e 'mysql --prompt="\x1B[31m\\u\x1B[34m@\x1B[32m\\h\x1B[0m:\x1B[36m\\d>\x1B[0m "')

次に:

$ colormysql -hHOSTNAME -uUSERNAME -pPASSWORD ...

これがなぜ機能するかについてさらに説明できますが、ANSIコードだけを渡すことはできませんか?
ブライアンエイジ

$(foo)fooの結果、この場合はechoの出力を実行します。エコーする-eは、\ x1bをエスケープ文字に展開します。\ x1b [31mは、現在の色を赤に設定する端末制御コードです。などなど。\ x1b [0mは、色をデフォルトの端末色に戻します。
Irongaze.com 14

1
:色をテストするとき、私はあなたが実行してexempleため、別名ステップをスキップrecomendatemysql --prompt="`echo -e '\033[01;32m\\d\033[01;34m >\033[00m '`"
PugganのSe

4
また、カラーコードを囲むエスケープコードを追加すると、次のように適切に機能します(プロンプトを混乱させることなく履歴をナビゲートできます)。$ alias colormysql = $(echo -e 'mysql --prompt = "\ 001 \ x1B [31m \ 002 \\ u \ 001 \ x1B [34m \ 002 @ \ 001 \ x1B [32m \ 002 \\ h \ 001 \ x1B [0m \ 002:\ 001 \ x1B [36m \ 002 \\ d> \ 001 \ x1B [0m \ 002 "')
デビッドサンタマリア

2
@CyprianGuerra-上記の@ david-santamariaのコメントを参照して、適切なサポートのためにシーケンスを使用して\001\002周囲を囲んでくださいreadline$ alias colormysql=$(echo -e 'mysql --prompt="\001\x1B[31m\002\\u\001\x1B[34m\002@\001\x1B[32m\002\\h\001\x1B[0m\002:\001\x1B[36m\002\\d>\001\x1B[0m\002 "') ブラウザーからのコピーアンドペーストで\002:\001は、コマンドの一部がクリップボードに挿入されるレンダリングの問題があるようです\002:\<200c><200b>001(ここで<200c>および<200b>は非印刷文字です。おそらく、単語からのCR / NLラッピング)。
dossy

8

色付けされたmysqlプロンプトの設定に関するチュートリアル。

手順1. setプロンプトで通常のログイン方法を理解します。

eric@dev ~ $ mysql --host=yourhost.com -u username --prompt="foobar> " -p
Enter password:
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 711
Server version: 5.6.19 MySQL Community Server (GPL)

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

foobar> 

ステップ2.解釈された式をエコーを介して「エイリアス」にパイプする方法を理解します。

上記の手順1とまったく同じです。

eric@dev ~ $ alias penguins=$(echo -e 'mysql --host=yourhost.com -u dev --prompt="foobar> " -p')
eric@dev ~ $ penguins
Enter password:
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 713
Server version: 5.6.19 MySQL Community Server (GPL)

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

foobar> exit
Bye
eric@dev ~ $

ステップ3. echo -eが色付けされた式を評価する方法を理解する:

これにより、「foobar>」プロンプトが赤になります。

alias penguins=$(echo -e 'mysql --host=yourhost.com -u dev --prompt="\x1B[31mfoobar>\x1B[0m " -p')
penguins

このような:

ここに画像の説明を入力してください

ステップ4.ここで何が起こっているかについて混乱している場合:

式を見てください: \x1B[31mfoobar>\x1B[0m

次の3つの部分があります。

code               what it means:

\x1B[31m           Start colorizing, 31m is red.
foobar>            prompt text
\x1B[0m            Stop colorizing.

ステップ4.高度な、プロンプトを本当に素晴らしいものにしましょう。

eric@dev ~ $ alias penguins=$(echo -e 'mysql --host=yourhost.com -u dev --prompt="\x1B[31m\\u\x1B[34m@\x1B[32m\\v\x1B[0m:\x1B[36m\\d>\x1B[0m " -p')
eric@dev ~ $ penguins

ここに画像の説明を入力してください

この大規模なコードが何をするかについて混乱している場合:

\x1B[31m\\u\x1B[34m@\x1B[32m\\v\x1B[0m:\x1B[36m\\d>\x1B[0m

説明:

Code         Note
\x1B[31m     Start colorizing red
\\u          escape the backslash for passage through echo, and print username
\x1B[34m     Start colorizing dark blue
@            literal at sign
\x1B[32m     Start colorizing green
\\v          escape the backslash for passage through echo, print server version
\x1B[0m      Stop colorizing
:            literal colon
\x1B[36m     Start colorizing cyan
\\d>         Backslash for passage through echo, print default db and >
\x1B[0m      Stop colorizing.

わあ 多くのコード。


1
readline行の長さとmysqlコマンドラインでの複数行の編集が混同しないように、端末コードを正しくエスケープする方法についてのアイデアはありますか?(プレスとホールドバックスペース、その後、複数の行を書いてみる)
cprn

これは完全に独立した接線の質問であり、個別のstackoverflow質問として尋ねられるべきです。もちろん、完全なプログラミング言語にアクセスすることで可能になりますが、問題は、数時間をかけずにどうすればいいかわからないことです。
エリックレシンスキー

0

私は端末のタイトルにプロンプ​​トを入れたいと思っていましたが、これは基本的に色の付いたプロンプトが必要なのと同じ問題で、エスケープコードが違うだけです。これに出くわしcolormysql、答えで言及された等のような特別なエイリアスを覚える必要なしにそれができるかどうか疑問に思いました。

私は.bashrc私のマシンでトリックを行う次のものを自分に追加しました:

export MYSQL_PS1=$(echo -e "\033]0;\u@\h [\d]\007\u@\h [\d]> ")

これはecho -eMYSQL_PS1変数に生のエスケープ文字(シンボリック文字ではなく)を生成するために使用します。これは色でも機能するはずです。


-2

それは非常に残念な答えですが、できません。


ANSIエスケープシーケンスの使用に関して、MySQLは以下のみを許可します

オプション値でエスケープシーケンス「\ b」、「\ t」、「\ n」、「\ r」、「\」、および「\ s」を使用して、バックスペース、タブ、改行、キャリッジリターン、バックスラッシュ、およびスペース文字。


cmjdmillerの答えに関して、grcはMySQLのシェルからの出力を「ページャー」を介してのみ表示するように機能します。


最善の方法は、次のように rlwrapを使用することですrlwrap -a -p'GREEN' mysql -uroot -hlocalhost -A --prompt="\u@\h:\d> "。ただし、プロンプト全体が色付けされるため、きめ細かな制御はできません。また、パスワードがクリアテキストで表示されるため、注意が必要です。


これは古くなっています。プロンプトオプションには多くの可能な値があります。こちらをご覧ください:dev.mysql.com/doc/refman/5.6/en/mysql-commands.html
Irongaze.com


間違っているほど古くなっているわけではありません。一つには、ANSIエスケープシーケンスはMySQLから完全に独立したものであり、もう一つには、ここの他の回答で十分に示されているように、確実に使用できます。
ジェフ
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.