前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >如何修改终端中$符号前面的一串名称?

如何修改终端中$符号前面的一串名称?

作者头像
LIYI
发布2020-07-22 14:43:34
2.3K0
发布2020-07-22 14:43:34
举报
文章被收录于专栏:艺述论专栏艺述论专栏

在知乎上看到这个问题,有人写了方法,但不详尽,我正好也遇到了这个问题,补充一下吧。以下内容有点长哦,但对于开发者值得了解一下。

不知道什么时候,我的终端里面,$符号前面的名称变成了一个不太相称的名字:

就是$符号前面的那个名称。这个截图是别人的,大概是这个意思,我原来的名称不是这个。

"这个名字太难看了,我想把它修改成一个简洁的名字。"

查了一下文档,知乎上 @Hermite Bai 提到,要在.bashrc 或者.bash_profile 文件中,修改 PS1。我知道这两个文件都是脚本配置文件,但是 PS1 是什么鬼?

我在/etc/bashrc 文件中,终于找到了 PS1 系统变量的存在:

代码语言:javascript
复制
if [ -z "$PS1" ]; then
   return
fi
PS1='\h:\W \u\$ '

"那么,PS1 到底是什么鬼?"

查到这篇文章内容( blog.csdn.net/ethanzhao ),有人说:

PS1 就是进入终端时,前面显示的一段以$结尾的字符,新电脑默认的名称是“登陆名@主机名”。

好吧,回到上面的 bash 代码,再看看它干了什么事。

其中 if... fi,这是 bash 脚本语法的 if 语句,fi 与 if 相反,代表完满结束了。-z "$PS1",这句代码代表查看 PS1 这个系统变量是否存在,如果存在,return 返回。

那么-z是什么呢?

“-z 是一个单目操作符,代表对变量为空不为空的判断”

语法是这样的:

代码语言:javascript
复制
-z $A:为空则为真,不空则为假

从这点看,前面知乎大哥说得没错。只要在.bashrc 或者.bash_profile 文件中,定义了 PS1 变量,就不会再执行下面的逻辑了。

在我的文件里,没有定义,那么这个名称是怎么形成的呢?

它其实执行了下面这行逻辑:

代码语言:javascript
复制
PS1='\h:\W \u\$ '

bash 脚本与众不同,字符串里面可以放置变量。在这个字符串里,只有最后面的"$"符号,还有中间的“:”,是一个字符,其它的都是变量,都有特殊的含义。

其中\h,在这里是 hostname 的简写,代表仅取主机名称中的第一个名字,主面名可以是两段式,例如 liyi.macOS,那么这个小 h 就代表 liyi。对比小 h,还有一个大 H,它的含义你可能猜到了,不说了。

\W 又代表什么呢?

是工作目录名称的最后路径中的一段,如果是\w,则代表完整的工作目录名称。用户目录会以 ~代替。

哦,我们经常会到终端中看到波浪符号。这里面大小的含义与 h 不同,没想到是大 W 代表短名称,而小 w 代表全名称。

最后面一个 u 代表是 username,是当前用户的用户名,这个名称可以在系统设置里,使用另外一个管理员帐号修改它。

所以我的终端前缀,在修改后,是这个样子的:

代码语言:javascript
复制
LiyiLocal:~ ning$

这个名称就来源于上面的代码拼接。

代码语言:javascript
复制
PS1='\h:\W \u\$ '

如果要保留这个格式,还有一个简便的工具可以使用:scutil。

这个工具名疑是 Store Access Util 的简称。它提到了对 ComputerName, LocalHostName, HostName 系统变量的修改办法。

代码语言:javascript
复制
sudo scutil --set HostName LIYI
sudo scutil --set LocalHostName LIYI

这两行代码你看出来了,它代表修改 HostName 与 LocalHostName。

但是,HostName 与 LocalHostName 又代表什么意思呢?

一个是主机名,一个是本地主机名。至于有什么区别,不知道。同是在本地,又不是在服务器上,有什么分别呢。一般就是将它们设置成同样的名称。

ComputerName 是计算机名称,这个名称在隔空传送时是有用的,我们依靠它判断传递对象。如果把不该发的文件,发给不该收的人就尴尬了,毕竟隔空不像微信,没有撤回功能啊。

对于我来讲,我是一个人使用本电脑,所以用户名我觉得可以省了。所以,我直接在/etc/bashrc 中将 PS1 的定义修改为了:

代码语言:javascript
复制
PS1='\h:\W$ '

所以最终我的终端效果是这样的:

代码语言:javascript
复制
LIYI:~$

对了,如果你修改了/etc/bashrc 脚本,不需要重启终端,只需要执行:

代码语言:javascript
复制
source /etc/bashrc

就可以了。所有脚本都是这样。

以上内容有什么价值呢,现在总结一下吧:

了解了 scutil 工具是干什么用的,可以用它简单方便地修改本地一干名称,不必打开系统设置麻烦地修改了,一个脚本就可以搞定了。了解了脚本的 if 语句,原来使用方括号[]+冒号;,来定义条件,分隔符不是花括号,而是 if、then 与 fi,像 VB 一样很奇怪的语法名称哦。对脚本文件是不是有一些了解了呢,/etc/bashrc、etc/profile、~/.bashrc、~/.bash_profile 这些都是配置文件,前两个是系统的,后两个是当前用户的,搞机器配置的时候,尤其在 Linux 服务器上,经常要与它们打交道。还有波浪符号~,它代表用户主目录。

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2020-07-19,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 艺述论 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档