MySQLコマンドラインの色プロンプトに色を追加したい。
私はこれまでのところスクリプト(database.sh)にあります:
mysql -uroot -hlocalhost -A --prompt="\u@\h:\d> "
私が希望root
する赤、@
であることを青、localhost
であることを緑とdatabase
するシアン:
root@localhost:database>
私のスクリプトでこれを行うことは可能ですか?
MySQLコマンドラインの色プロンプトに色を追加したい。
私はこれまでのところスクリプト(database.sh)にあります:
mysql -uroot -hlocalhost -A --prompt="\u@\h:\d> "
私が希望root
する赤、@
であることを青、localhost
であることを緑とdatabase
するシアン:
root@localhost:database>
私のスクリプトでこれを行うことは可能ですか?
回答:
できないと言う人の話を聞かないでください。ここに:
$ 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 ...
$(foo)
fooの結果、この場合はechoの出力を実行します。エコーする-eは、\ x1bをエスケープ文字に展開します。\ x1b [31mは、現在の色を赤に設定する端末制御コードです。などなど。\ x1b [0mは、色をデフォルトの端末色に戻します。
mysql --prompt="`echo -e '\033[01;32m\\d\033[01;34m >\033[00m '`"
\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ラッピング)。
手順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.
わあ 多くのコード。
readline
行の長さとmysql
コマンドラインでの複数行の編集が混同しないように、端末コードを正しくエスケープする方法についてのアイデアはありますか?(プレスとホールドバックスペース、その後、複数の行を書いてみる)
私は端末のタイトルにプロンプトを入れたいと思っていましたが、これは基本的に色の付いたプロンプトが必要なのと同じ問題で、エスケープコードが違うだけです。これに出くわしcolormysql
、答えで言及された等のような特別なエイリアスを覚える必要なしにそれができるかどうか疑問に思いました。
私は.bashrc
私のマシンでトリックを行う次のものを自分に追加しました:
export MYSQL_PS1=$(echo -e "\033]0;\u@\h [\d]\007\u@\h [\d]> ")
これはecho -e
、MYSQL_PS1
変数に生のエスケープ文字(シンボリック文字ではなく)を生成するために使用します。これは色でも機能するはずです。
それは非常に残念な答えですが、できません。
ANSIエスケープシーケンスの使用に関して、MySQLは以下のみを許可します。
オプション値でエスケープシーケンス「\ b」、「\ t」、「\ n」、「\ r」、「\」、および「\ s」を使用して、バックスペース、タブ、改行、キャリッジリターン、バックスラッシュ、およびスペース文字。
cmjdmillerの答えに関して、grcはMySQLのシェルからの出力を「ページャー」を介してのみ表示するように機能します。
最善の方法は、次のように
rlwrapを使用することですrlwrap -a -p'GREEN' mysql -uroot -hlocalhost -A --prompt="\u@\h:\d> "
。ただし、プロンプト全体が色付けされるため、きめ細かな制御はできません。また、パスワードがクリアテキストで表示されるため、注意が必要です。