首页 > 数据库 >自定义 MySQL Shell 提示符

自定义 MySQL Shell 提示符

时间:2024-08-21 11:49:21浏览次数:8  
标签:host% Shell prompt 自定义 提示 classes MySQL


MySQL Shell 中的提示符的样式和格式可以根据使用者的需求进行定制。我们可以配置提示符以显示有关数据库连接和使用的模式的不同或简化信息。本文将展示如何添加视觉提示,让您知道何时连接到生产数据库。

设置步骤
既然您正在阅读关于自定义 MySQL Shell 的内容,您应该已经安装了它。如果没有,请在继续之前下载并安装它。

提示主题文件
自定义 MySQL Shell 提示符的最简单方法是复制现有的提示主题文件。MySQL Shell 包含了几个提示文件。这些文件位于以下目录:
Windows - %programfiles%\MySQL\MySQL Shell 8.0\share\mysqlsh\prompt\
MacOs - /usr/local/mysql-shell/share/mysqlsh/prompt/
Linux - /usr/share/mysqlsh/prompt/
这些文件夹中的文件列表将类似于:
README.prompt
prompt_16.json
prompt_256.json
prompt_256inv.json
prompt_256pl+aw.json
prompt_256pl.json
prompt_classic.json
prompt_dbl_256.json
prompt_dbl_256pl+aw.json
prompt_dbl_256pl.json
prompt_nocolor.json
要了解不同文件包含的信息,请查看 README.prompt。

我们将要用作基础的提示文件复制到以下位置:
Linux and OS X:
Cp /usr/share/mysqlsh/prompt/prompt_256.json ~/.mysqlsh/prompt.json #注意目录文件名一定要是prompt.json
Windows - %AppData%\Roaming\MySQL\mysqlsh\
MacOS 和 Linux - ~/.mysqlsh/
我将在此演示中使用 cat ~/.mysqlsh/prompt.json,因为我喜欢 Powerline 字体的美学。以下是默认 JSON 的外观。

如果 MySQL Shell 已经打开,我们必须重新启动它才能添加主题。当我们使用这个文件启动 MySQL Shell 时,我们将看到以下内容:

 

以上提示符由六个部分组成:
状态:系统是否为生产系统,连接是否已丢失。
MySQL:提醒您正在使用 MySQL 数据库。
连接:您连接的主机以及使用 SSL 的端口。
模式:您正在使用的模式:JS = JavaScript,PY = Python 和 SQL = SQL。
结尾:提示符以 > 结尾。

提示背景颜色
当我使用这个提示主题时,我首先注意到提示的背景颜色与我的终端背景颜色不同。

这种颜色差异让我感到不舒服。由于我没有将黑色作为终端的背景颜色,我需要更改提示的背景颜色。是的,我可以将终端的背景更改为黑色,但那样你就学不到如何更改提示的背景颜色了。

管理提示背景颜色的 JSON 代码块(大约在第 102 行附近)是:

"prompt": {
"text": "\ue0b0 ",
"cont_text": "%linectx%\ue0b0 ",
"bg": "0" #删除加红加粗的字符串
}

bg 属性控制提示的背景颜色。在这种情况下,它被设置为 0,即黑色。我可以通过试错来找到接近背景颜色的颜色,但如果我那样做,如果我将来为终端选择了不同的背景颜色,我就需要再次更改颜色。因此,解决这种颜色差异的简单方法是移除该设置。我将提示块更改为:

"prompt": {
"text": "\ue0b0 ",
"cont_text": "%linectx%\ue0b0 "
}

当我重新启动 MySQL Shell 时,我们可以看到提示的背景颜色现在与终端背景匹配。
如果我更改终端主题,我将不需要再次更改提示的背景。

更新提示文本
接下来让我感到困扰的是主机信息有点长,因为它包括了 SSH 主机和数据库主机。我更喜欢较短的提示文本,因此我们将对此进行缩短。我们将修改的 JSON 代码块位于传输变量定义的第 94 行左右。
"transport": {
"match": {
"pattern": "%ssh_host%",
"value": ""
},
"if_true": "%target%",
"if_false": "%ssh_host% \u2192 %target%"
}

这个代码块告诉 MySQL Shell,如果 %ssh_host% 的值是一个空字符串,将传输变量的值设置为 %target% 变量的值——通常这个值是由主机和端口用冒号(:)分隔的。

如果 %ssh_host% 的值不是空字符串,传输变量的值将设置为 %ssh_host% 的值,后面跟着一个右箭头的字符值,最后以 %target% 变量的值结束。

对于我的需求来说,端口号并不是必要的。我也不喜欢箭头周围的额外空格。为了解决这个问题,我将 if_false 行更改为以下内容:

"if_false": "%ssh_host%\u2192%host%"
当我重新启动 MySQL Shell 并再次连接到数据库时,提示看起来如下图所示。请注意,端口不再显示,箭头周围的空格已被移除。

 


生产环境的视觉提示
我经常同时运行多个数据库连接。因此,我希望添加一个视觉提示,让我知道何时连接到了生产数据库。我们已经在我们的 JSON 中有一个名为 is_production 的变量。该变量的定义大约在第 72 行附近,看起来像下面的 JSON。
"is_production": {
"match": {
"pattern": "*;%host%;*",
"value": ";%env:PRODUCTION_SERVERS%;"
},
"if_true": "production",
"if_false": ""
}

默认定义会查找一个名为 PRODUCTION_SERVERS 的环境变量,以查看其值是否与 %host% 变量的值匹配。如果匹配,is_production 的值将设置为 production。如果不匹配,is_production 的值将设置为空字符串。

为了这个演示,首先在环境变量中定义PRODUCTION_SERVERS这个变量值:
[root@centos7 ~]# cat .bash_profile
export PRODUCTION_SERVERS="172.16.1.233"

然后再修改/root/.mysqlsh/prompt.json中的数据如下:
"variables": {
"is_production": {
"match": {
"pattern": "%env:PRODUCTION_SERVERS%",
"value": "172.16.1.233"
},
"if_true": "production",
"if_false": ""
},

重新通过mysqlsh登录就是下面这样的了:

 


更改类值
这个提示更好了,但文本颜色应该是白色。我不确定为什么不是白色,但我认为这是因为无障碍性问题,颜色对比度不够。要更改生产标签的颜色,我们查看大约在第65行附近的生产类。

"production": {
"text": " PRODUCTION ",
"bg": "red",
"fg": "white"
}

我将改变背景和前景颜色以增加对比度。我还将把文本值从“PRODUCTION”改为“PROD”,因为我们刚刚在提示符上腾出了一些空间,现在又失去了一些。我的新的 JSON 代码块如下:
"production": {
"text": " PROD ",
"bg": 124,
"fg": 15
}

我重新启动 MySQL Shell 并重新连接以查看更改。

 


移动一个段落
在我们的提示符中,显示不同信息的部分被称为“段落”。我们可以在主题中添加、移除和移动段落。我想把“PROD”标签移到提示符的末尾,以便更容易引起我的注意。

在我们的 JSON 文件中,段落是用类似下面文本的 JSON 对象数组来定义的。
"segments": [
{
"classes": [
"disconnected%host%",
"%is_production%"
]
},
{
"text": " My",
"bg": 254,
"fg": 23
},
{
"separator": "",
"text": "SQL ",
"bg": 254,
"fg": 166
},
{
"classes": [
"disconnected%host%",
"%ssl%host%session%"
],
"shrink": "truncate_on_dot",
"bg": 237,
"fg": 15,
"weight": 10,
"padding": 1
},
{
"classes": [
"noschema%schema%",
"schema"
],
"bg": 242,
"fg": 15,
"shrink": "ellipsize",
"weight": -1,
"padding": 1
},
{
"classes": [
"%session%trx%trx%%autocommit%"
],
"weight": -1
},
{
"classes": [
"%Mode%"
],
"text": "%Mode%",
"padding": 1
}
]

为了移动生产环境,我们首先从段落数组的第一个元素的 classes 属性中移除 "%is_production%"。
"segments": [
{
"classes": [
"disconnected%host%",
"%is_production%" #删除加粗标红的部分
]
},
删除之后如下所示:
{
"classes": [
"disconnected%host%"
]
}

接下来,在最后一个段落之前,我们创建一个新的 JSON 对象,其中在 classes 数组中有一个元素,其值为 %Mode%。我们创建一个 classes 属性作为一个数组,并将 %is_production% 添加为一个元素。最后三个段落的元素应该类似于下面的 JSON。
"classes": [
"%session%trx%trx%%autocommit%"
],
"weight": -1
},
{
"classes": [
"%is_production%"
]
}, #加粗的部分是新添加的
{
"classes": [
"%Mode%"
],
"text": "%Mode%",
"padding": 1
}
]
}

当我们重新启动 MySQL Shell 并重新连接时,PROD 标签更靠近提示的末尾,使其更容易看到。

 

总结:
在 MySQL Shell 中自定义提示可以让我们展示我们想要的信息并隐藏我们不想要的信息。我们还可以添加视觉提示,以便在连接到生产服务器时让我们知道,并且我们可以移动不同的段落,使它们更符合我们的需求。要了解更多关于在 MySQL Shell 中自定义提示的内容,请查阅文档,同时也可以查看 README.prompt 文件的内容。

文章看完了,如果觉得本文对您的工作或生活有用,希望分享给你身边的朋友,一起学习,共同进步哈~~~

欢迎关注我的公众号【数库信息技术】,你的关注是我写作的动力源泉

各大平台都可以找到我:
————————————————————————————
公众号:数库信息技术
墨天轮:https://www.modb.pro/u/427810
CSDN :https://blog.csdn.net/rscpass
51CTO: https://blog.51cto.com/u_16068254
博客园:https://www.cnblogs.com/shukuinfo
知乎:https://www.zhihu.com/people/shukuinfo
————————————————————————————

标签:host%,Shell,prompt,自定义,提示,classes,MySQL
From: https://www.cnblogs.com/shukuinfo/p/18371309

相关文章

  • MySQL数据库命令行操作
    MySQL数据库命令行操作运行输入cmd有的要以管理员身份进入登录数据库mysql-h主机名-u用户名-p或者mysql-uroot-p-h:该命令用于指定客户端所要登录的MySQL主机名,登录当前机器该参数可以省略;-u:所要登录的用户名;-p:告诉服务器将会使用一个密码来......
  • mysql 二进制日志总结
    常用sql语句查看二进制日志文件位置SHOWVARIABLESLIKE'log_bin_basename';查看二进制日志文件的索引文件位置SHOWVARIABLESLIKE'log_bin_index';查看二进制日志文件的过期天数SHOWVARIABLESLIKE'expire_logs_days';//取值范围0-99默认0关闭列出MySQL......
  • 在 PowerShell 脚本中调用 msiexec 进行静默安装,可以通过设置 msiexec 的参数来实现。
    在PowerShell脚本中调用msiexec进行静默安装,可以通过设置msiexec的参数来实现。静默安装意味着在安装过程中不会弹出用户界面,也不会进行用户交互。下面是一个示例,演示如何使用PowerShell脚本执行静默安装。示例PowerShell脚本powershellCopyCode#MSI文件的路径$m......
  • X-anylabeling如何手动加载(自定义)模型 : 以Segment Anything 为例
    提示:文章目录前言1手动下载模型至软件默认读取路径2加载自定义模型假设你已有模型(.pth),如何进行导出安装导出工具导出你的模型,在标注软件中加载模型打开软件,加载‘自定义’模型。并选择上面提到的配置文件X-anylabeling源码安装过程中遇到的问题GPU环境问题opencv......
  • MySQL存储过程示例代码
    CREATEDEFINER=`root`@`%`PROCEDURE`getReportWeavingProductionDay`(instartTimedatetime,inendTimedatetime,infactoryIdsvarchar(100),inmachineIdsvarchar(5000),inPageSizeint,inDataFromIndexint)BEGIN--参数说明--startTime:开始时间,endTime:结束时间,f......
  • MySQL基本操作
    MySQL基本操作学习目标:学习基本的SQL操作,实现数据库的基本管理SQL基本语法SQL库操作SQL表操作SQL数据操作一、SQL语法规则目标:了解SQL的基本语法规则SQL语法规则:SQL是一种结构化编程语言基础SQL指令通常是以行为单位SQL指令需要语句结束符,默认是英文分号:;、\g、\G\G:主......
  • Mysql从指定位置截取字符串
    在实际的项目开发中有时会有对数据库某字段截取部分的需求,这种场景有时直接通过数据库操作来实现比通过代码实现要更方便快捷些,mysql有很多字符串函数可以用来处理这些需求,如Mysql字符串截取总结:left()、right()、substring()、substring_index()。一.从左开始截取字符串用法:lef......
  • Windows 上使用 PowerShell 设置防火墙规则和端口转发; Windows 上配置端口转发,将 3389
    在PowerShell中配置Windows防火墙的端口转发涉及几个步骤。首先,你需要确保你有足够的权限来进行这些操作(通常需要管理员权限)。以下是如何在PowerShell中配置端口转发的示例步骤:1. 打开PowerShell以管理员身份运行PowerShell。你可以右键点击PowerShell图标,选择“以管......
  • QTabWidget自定义样式(仿DotNetBar)
    QSS如下,若需要tab栏背景色需要添加ui->tabWidget->setAttribute(Qt::WA_StyledBackground);语句使background-color生效,这个时候qtdesigner中仍然看不到背景色,但是不要担心它是生效的,只需在属性中勾上autofillbackground即可在designer中预览(该属性在QWidget属性组中,实际上勾不勾......
  • Linux中MySQL安装与升级中的相关知识
    Linux中MySQL安装与升级中的相关知识1.MySQL的RPM安装通常分为不同的包,包括Server、Common、Client、Devel、Libs、Libs-compat、Test、Source,上述每个包的功能。Server:包含MySQL服务器的主要组件。Common:提供通用的功能和文件。Client:提供客户端工具用于连接服务......