motd
/etc/motd
在类 Unix 系统中,/etc/motd 是一个包含“布告栏信息”(message of the day)的文件。 每次用户登录时,/etc/motd 文件的内容会显示在用户的终端。系统管理员可以在文件中编辑 系统活动消息,例如:管理员通知用户系统何时进行软件或硬件的升级、何时进行系统维护等。
比起电子邮件,使用 motd 给所有用户发送消息显得更有效率; motd 缺点是,现在许多用户登录系统时选择自动进入图形界面,所以这些信息往往看不到。
/etc/issue
/etc/issue 文件的使用方法与 /etc/motd 文件相差不大,它们的主要区别在于:当一个网络用户或通过串口登录系统上时, /etc/issue 的文件内容显示在 login 提示符之前,而 /etc/motd 内容显示在用户成功登录系统之后。
定制 motd
默认打开的 Terminal 终端不会显示任何内容,我们可以通过定制 motd,显示相应的问候语之类。
比如 coding 界著名的佛祖:
_ooOoo_
o8888888o
88" . "88
(| -_- |)
O\ = /O
____/`---'\____
.' \\| |// `.
/ \\||| : |||// \
/ _||||| -:- |||||- \
| | \\\ - /// | |
| \_| ''\---/'' | |
\ .-\__ `-` ___/-. /
___`. .' /--.--\ `. . __
."" '< `.___\_<|>_/___.' >'"".
| | : `- \`.;`\ _ /`;.`/ - ` : | |
\ \ `-. \_ __\ /__ _/ .-` / /
=====`-.____`-.___\_____/___.-`____.-'=====
`=---='
...........................................
佛祖保佑 永无BUG
牛牛的问候:
________________________________________
/ Hello Bob! \
\ Good to see you ~ /
----------------------------------------
\ ,__,
\ (oo)____
(__) )\
||--|| *
颜色 、动态
motd 内容还可以多彩化和动态化(比如动态显示当前机器 cpu、内存使用情况等)。
// Todo …
PS1
除了 motd,Terminal 终端在输入命令前面会有默认的提示符,提示符显示的内容和格式由 bash 的 PS1(The primary prompt string) 变量控制,在 Terminal 里输入 echo $PS1
可以查看 PS1 的值。
比如 macOS 默认显示的提示符:Mac-mini:~ bob$ ,其 PS1 = \h:\W \u$
我们可以通过修改 bash 的 PS1 变量来改变提示符,对于 macOS,只需要在 ~/.bash_profile 里对 PS1 赋值即可(如下是我自己的 PS1 值):
echo PS1="\[\e[1;32m\]\u\[\e[1;33m\]@\[\e[1;34m\]\h\[\e[1;36m\] \W\[\e[0m\]\$ " >> ~/.bash_profile
如果是 zsh,则使用如下方式:
# zsh
autoload -U colors && colors
PS1="%{$fg[green]%}%n%{$reset_color%}@%{$fg[blue]%}%m %{$fg[cyan]%}%~ %{$reset_color%}%% "
PS1 各项参数值的含义,详见 Controlling the Prompt:
参数 | 解释 |
---|---|
\d | d 代表 date,表示日期 |
\h | h 代表 hostname,表示主机名,仅取主机的第一个名字 |
\H | 完整的主机名 |
\t | t 代表 time,表示时间,24 小时制,格式:HH:MM:SS |
\T | 时间,12 小时制,格式:HH:MM:SS |
\@ | 时间,12 小时制,格式:am/pm |
\A | 时间,24 小时制,格式:HH:MM |
\w | w 代表 work directory,表示完整的工作路径 |
\W | 工作路径的最后一个目录 |
\u | u 代表 username,表示当前用户名 |
\v | v 代表 version,表示当前 bash 版本 |
$ | 提示字符,root 用户显示 #,普通用户显示 $ |
颜色定义
开始:”\e[N;Mm”,其中 N 可以指效果或是背景色,M 是前景色
结束:”\e[m”,终止特效
“\e[“, e 代表 escape,Control Sequence Indicator (CSI),转义字符 ESC。由于 ESC 转义字符在 ASCII 码中十进制是27,八进制是033,十六进制是0x1b,所以也可以用八进制”\033”或者十六进制”0x1b”代替。
COLOR | TEXT | BACKGROUND | COLOR | TEXT |
---|---|---|---|---|
Black | 30 | 40 | Dark Gray | 1;30 |
Red | 31 | 41 | Light Red | 1;31 |
Green | 32 | 42 | Light Green | 1;32 |
Yellow | 33 | 43 | Light Yellow | 1;33 |
Blue | 34 | 44 | Light Blue | 1;34 |
Magenta | 35 | 45 | Light Magenta | 1;35 |
Cyan | 36 | 46 | Light Cyan | 1;36 |
Light Gray | 37 | 47 | White | 1;37 |
FORMAT | TEXT |
---|---|
reset | 0 |
bold | 1 |
half-bright | 2 |
underline | 4 |
blink | 5 |
inverse | 7 |
conceal | 8 |
normal | 22 |
underline off | 24 |
blink off | 25 |
inverse off | 27 |
PROMPT_COMMAND
如果设置了该变量,其值会作为一个 command 指令执行,且早于 PS1。
shell变量含有空格时的处理方法
// .zshrc or .bash.profile
JDK8=/Library/Java/JavaVirtualMachines/jdk1.8.0_221.jdk/Contents/Home
alias java8="export JAVA_HOME=$JDK8"
NDROID_STUDIO=/Applications/Android\ Studio.app/Contents
JDK11=$ANDROID_STUDIO/jre/Contents/Home
alias java11="export JAVA_HOME=$JDK11"
如上所示,java8 和 java11 是用于本地快速切换 java 环境的两个别名。 java8 可以正常执行,java11 则会因为含有空格执行失败
export: not valid in this context: Studio.app/Contents/jre/Contents/Home
当 Linux shell 路径变量出现空格时:
- 若外层无引号,路径变量加上双引号就行啦
- 若外层有引号,路径变量加上双引号并转义(反斜杠)或者加单引号(推荐)
所以,正确的配置方式如下:
// .zshrc or .bash.profile
JDK8=/Library/Java/JavaVirtualMachines/jdk1.8.0_221.jdk/Contents/Home
alias java8="export JAVA_HOME=$JDK8"
NDROID_STUDIO=/Applications/Android\ Studio.app/Contents
JDK11=$ANDROID_STUDIO/jre/Contents/Home
alias java11="export JAVA_HOME='$JDK11'"
参考