记录个自己在 CentOS 7 上使用的例子,相关参考资料见文尾。
一、Bash 实例
# 网卡接口
MY_NETWORK_INTERFACE='ens33'
# 定义颜色变量
MY_COLOR_WHITE=$'\e[37;0m'
MY_COLOR_PINK=$'\e[35;1m'
MY_COLOR_GREEN=$'\e[32;1m'
MY_COLOR_BLUE=$'\e[34;1m'
MY_COLOR_YELLOW=$'\e[33;1m'
MY_COLOR_36=$'\e[36;1m'
# 定义表示各个部分的值和颜色
MY_USER=${MY_COLOR_GREEN}'\u'
MY_AT=${MY_COLOR_WHITE}'@'
MY_HOST=${MY_COLOR_36}'\H'
# 获取 IP 的命令
MY_IP_CMD="/sbin/ifconfig ${MY_NETWORK_INTERFACE} | sed -nr 's/.*inet (addr:)?(([0-9]*\.){3}[0-9]*).*/\2/p'"
MY_COLON=${MY_COLOR_WHITE}':'
MY_CUR_PATH=${MY_COLOR_YELLOW}'\w'
# 获取日期的命令
DATE_TIME_CMD='date "+%Y-%m-%d %H:%M:%S %z"'
# 设置提示风格
PS1='[\s-\V]'${MY_USER}${MY_AT}${MY_HOST}'['${MY_COLOR_36}"\$($MY_IP_CMD)"']'${MY_COLON}${MY_CUR_PATH}" ${MY_COLOR_WHITE}[\$($DATE_TIME_CMD)]"'\n\$ '
两点说明:
1、由于想自定义时间显示格式(如:显示时区信息),所以没有使用 \t
参数,而是使用
\$(date "+%Y-%m-%d %H:%M:%S %z")`
的方式来获取,开头的 \
符号非常重要!这能保证每次需要提示符时重新计算其中的值。否则只会使用第一次计算的结果,对于时间来说,这不是我们想要的结果。
2、截取 IP 地址的操作为:
# Linux
$ /sbin/ifconfig ens33 | sed -nr 's/.*inet (addr:)?(([0-9]*\.){3}[0-9]*).*/\2/p'
# macOS
$ /sbin/ifconfig ens33 | sed -nE 's/.*inet (addr:)?(([0-9]*\.){3}[0-9]*).*/\2/p'
-
ens33
为指定的网卡,实际情况中替换成实际的网卡即可 -
sed
用于处理执行的数据流,在 Linux 和 macOS 上有差别
二、Fish 实例
配置文件位置:
~/.config/fish/functions/fish_prompt.fish
配置内容:
function fish_prompt
set user (set_color --bold cyan)(whoami)(set_color normal)
set machine (set_color --bold blue)(hostname| cut -d . -f 1)(set_color normal)
set ip (set_color --bold blue)(/sbin/ifconfig en0 | sed -nr 's/.*inet (addr:)?(([0-9]*\.){3}[0-9]*).*/\2/p')(set_color normal)
set -l realhome ~
set directory (set_color --bold green)(echo $PWD | sed -e "s|^$realhome|~|")(set_color normal)
set -g __fish_git_prompt_show_informative_status 'yes'
set -g __fish_git_prompt_showcolorhints 'yes'
set color_bold_red (set_color --bold red)
set color_bold_yellow (set_color --bold yellow)
set color_bold_cyan (set_color --bold cyan)
set color_reset (set_color normal)
set -g __fish_git_prompt_char_dirtystate "$color_bold_red±$color_reset"
set -g __fish_git_prompt_char_cleanstate "$color_bold_red♥$color_reset"
set -g __fish_git_prompt_char_stagedstate "$color_bold_yellow●$color_reset"
set -g __fish_git_prompt_char_stagedstate "$color_bold_cyan…$color_reset"
set -g __fish_git_prompt_char_stateseparator ' '
# I have *no* idea why this works. Maybe set_color just ignores the second bold?
set -g __fish_git_prompt_color_branch "--bold" "--bold" "yellow"
set color_bold_magenta (set_color --bold magenta)
set git (__fish_git_prompt "$color_bold_magenta^$color_reset%s")
set date_str (date "+%Y-%m-%d %H:%M:%S %z")
# echo -s $user (set_color yellow)'@' $machine ':' $directory $git
echo -s '[fish]' $user (set_color yellow)'@' $machine "[$ip]:" $directory $git " [$date_str]"
if [ $USER = "root" ]
set caret (set_color red ) "#"
else
set caret (set_color magenta) "\$"
end
echo -s $caret ' '(set_color normal)
end
三、参考
- Linux PS1 提示符定义
- CentOS下命令行终端的背景和shell命令提示符及其颜色
- How to Customize Bash Colors and Content in Linux Terminal Prompt
- Bash tips: Colors and formatting (ANSI/VT100 Control sequences)
- The Best Linux Terminal Color Schemes For 2019
- 在 Shell 命令提示符里显示当前服务器的 IP 地址
- How to Customize Shell Variable PS1-PS4 on Bash Prompt
- Fish Prompt
(完)
网友评论