美文网首页命令行工具
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