美文网首页命令行工具
Linux Shell 提示符设置

Linux Shell 提示符设置

作者: 舌尖上的大胖 | 来源:发表于2019-05-05 13:36 被阅读0次

记录个自己在 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 Shell 提示符设置

    本文链接:https://www.haomeiwen.com/subject/hnwcoqtx.html