工具---让bash显示的信息更加有用

13 篇文章 1 订阅
9 篇文章 1 订阅

问题描述

想让bash默认就能显示出conda当前环境,git分支信息和fish里面的路径折叠。不想用zsh因为慢,不想用fish因为怕兼容性出问题。
修改前终端显示是这样的:
在这里插入图片描述
因为我用tmux,所以主机名和用户名对我没啥意义,而且这么长的路径个人觉得很占空间,毕竟要路径都直接pwd。我最想要的是conda环境信息和git分支信息。

修改之后终端变成了这样:
在这里插入图片描述
终端仅仅显示conda信息,分支信息,路径只显示首字母。分支绿色代表工作区干净,红色表示不干净,黄色表示本地分支领先远程分支。若是HEAD处于游离态,那么不显示分支名,直接显示HEAD指向的快照

解决方案

先把以下文件内容保存成一个脚本,比如叫ps.sh:

#!/bin/bash

COLOR_RED="\033[0;31m"
COLOR_PINK="\033[38;5;211m"
COLOR_YELLOW="\033[0;33m"
COLOR_GREEN="\033[0;32m"
COLOR_OCHRE="\033[38;5;95m"
COLOR_BLUE="\033[0;34m"
COLOR_WHITE="\033[0;37m"
COLOR_RESET="\033[0m"

# 系统语言是英文用这个
#function git_color() {
#    local git_status="$(git status 2> /dev/null)"
#  
#    if [[ ! $git_status =~ "working tree clean" ]]; then
#       echo -e $COLOR_RED
#    elif [[ $git_status =~ "Your branch is ahead of" ]]; then
#        echo -e $COLOR_YELLOW
#    elif [[ $git_status =~ "nothing to commit" ]]; then
#        echo -e $COLOR_GREEN
#    else
#        echo -e $COLOR_OCHRE
#    fi
#}

#function git_branch() {
#    local git_status="$(git status 2> /dev/null)"
#    local on_branch="On branch ([^${IFS}]*)"
#    local on_commit="HEAD detached at ([^${IFS}]*)"
#   
#    if [[ $git_status =~ $on_branch ]]; then
#        local branch=${BASH_REMATCH[1]}
#        echo "($branch)"
#    elif [[ $git_status =~ $on_commit ]]; then
#        local commit=${BASH_REMATCH[1]}
#        echo "($commit)"
#    fi
#}

function git_branch() {
    local git_status="$(git status 2> /dev/null)"
    local on_branch="位于分支 ([^${IFS}]*)"
    local on_commit="HEAD 目前位于 ([^${IFS}]*)"
    local on_detach="头指针分离于 ([^${IFS}]*)"   

    if [[ $git_status =~ $on_branch ]]; then
        local branch=${BASH_REMATCH[1]}
        echo "($branch)"
    elif [[ $git_status =~ $on_commit ]]; then
        local commit=${BASH_REMATCH[1]}
        echo "($commit)"
    elif [[ $git_status =~ $on_detach ]]; then
        local commit=${BASH_REMATCH[1]}
        echo "($commit)"
    fi
}

function git_color() {
    local git_status="$(git status 2> /dev/null)"
  
    if [[ ! $git_status =~ "干净的工作区" ]]; then
        echo -e $COLOR_RED
    elif [[ $git_status =~ "您的分支领先" ]]; then
        echo -e $COLOR_YELLOW
    elif [[ $git_status =~ "无文件要提交" ]]; then
        echo -e $COLOR_GREEN
    else
        echo -e $COLOR_OCHRE
    fi
}
# >>> 修改终端显示 <<<-----------------------------------------------------------------------------------------------
# 缩短路径显示 
function shortwd() {
    num_dirs=3
    pwd_symbol="..."
    newPWD="${PWD/#$HOME/~}"
    if [ $(echo -n $newPWD | awk -F '/' '{print NF}') -gt $num_dirs ]; then
        newPWD=$(echo -n $newPWD | awk -F '/' '{print $1 "/.../" $(NF-1) "/" $(NF)}')
    fi 
    echo -n $newPWD
}

function _fish_collapsed_pwd() {
    local pwd="$1"
    local home="$HOME"
    local size=${#home}
    [[ $# == 0 ]] && pwd="$PWD"
    [[ -z "$pwd" ]] && return
    if [[ "$pwd" == "/" ]]; then
        echo "/"
        return
    elif [[ "$pwd" == "$home" ]]; then
        echo "~"
        return
    fi
    [[ "$pwd" == "$home/"* ]] && pwd="~${pwd:$size}"
    if [[ -n "$BASH_VERSION" ]]; then
        local IFS="/"
        local elements=($pwd)
        local length=${#elements[@]}
        for ((i=0;i<length-1;i++)); do
            local elem=${elements[$i]}
            if [[ ${#elem} -gt 1 ]]; then
                elements[$i]=${elem:0:1}
            fi
        done
    else
        local elements=("${(s:/:)pwd}")
        local length=${#elements}
        for i in {1..$((length-1))}; do
            local elem=${elements[$i]}
            if [[ ${#elem} > 1 ]]; then
                elements[$i]=${elem[1]}
            fi
        done
    fi
    local IFS="/"
    echo "${elements[*]}"
}

#export current_conda_env=$CONDA_PROMPT_MODIFIER
# >>> 修改终端显示 <<<-------------------------------------------------------------------------------------------------
function changeps(){
    PS1="\[$COLOR_PINK\]\$(_fish_collapsed_pwd)"
    PS1+="\[\$(git_color)\]"
    PS1+=" \$(git_branch)"
    PS1+="\[$COLOR_BLUE\]\$\[$COLOR_RESET\] "
    export PS1
    conda activate base
}

然后在.bashrc文件里加上

source ps.sh路径

然后source .bashrc

现在你想要更改之后的终端样子,执行changeps就行,想恢复就source .bashrcok

参考

  • https://coderwall.com/p/pn8f0g/show-your-git-status-and-branch-in-color-at-the-command-prompt
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: Linux是一种操作系统,而-bash是Linux中的一种shell(命令行解释器),它允许用户在命令行中输入命令并执行它们。-bash是Linux默认的shell之一,它提供了许多有用的功能和命令,使用户能够更轻松地管理和操作系统。 ### 回答2: Linux -bash 是指 Linux 系统中的 Bash(Bourne Again SHell)终端或命令行界面。 Bash 是一种常用的 Unix shell,它是用于管理和执行命令行操作的基础工具。它允许用户在 Linux 系统上输入和执行各种命令,与系统进行交互,并管理文件和文件夹。 Linux -bash 提供了一个交互式环境,用户可以在其中执行各种命令。它可以用于执行系统管理任务,如安装软件包、配置网络设置、管理用户和权限等。此外,还可以使用 bash 脚本编写批量处理任务,实现自动化和脚本化操作。 在 -bash 终端中,用户可以使用各种命令来探索文件系统、浏览文件和文件夹、编辑文本文件等。用户可以通过输入命令和参数,实现不同的操作和功能,比如复制、移动、删除文件,修改文件权限等等。 -bash 终端也提供了强大的命令行编辑和历史纪录功能。用户可以使用上下箭头键浏览之前输入的命令,并进行修改和再次执行。此外,可以使用 Tab 键进行自动完成操作,节省输入命令的时间和工作量。 总而言之,Linux -bash 是 Linux 系统中常用的命令行界面,在系统管理、文件操作和批处理方面提供了丰富的功能和灵活性,是 Linux 用户和系统管理员必不可少的工具之一。 ### 回答3: Linux的-bash是一种命令行解释器,也称为Bourne Again SHell。Bash是Unix操作系统中最常用的shell之一,由于Linux是基于UNIX的,因此Bash也成为了Linux中最常用的shell。 -bash表示当前用户所使用的shell环境是Bash。在Linux系统中,当我们打开终端或者SSH登录到服务器时,会自动进入一个shell环境,这个环境中我们可以使用各种命令来执行各种操作。 Bash是一个功能强大且灵活的shell,它支持大量的命令,可以用于管理和操作文件、目录、进程、权限、网络等各个方面。通过Bash,我们可以输入命令并执行,也可以编写shell脚本来进行自动化操作。 在-bash下,我们可以使用各种命令来管理Linux系统,比如ls命令用于列出当前目录下的文件和子目录,cd命令用于切换目录,pwd命令用于显示当前所在的目录,mkdir命令用于创建新的目录,rm命令用于删除文件和目录,等等。 此外,Bash还支持各种运算符和控制结构,允许我们编写复杂的shell脚本来自动化任务。我们可以使用if语句来进行条件判断,使用for和while循环来进行重复操作,还可以通过管道(|)来连接多个命令,实现更复杂的操作。 总之,Linux的-bash是一种强大的命令行解释器,它为我们提供了丰富的命令和功能,使我们能够高效地管理和操作Linux系统。无论是日常使用还是系统管理,熟练掌握-bash都是非常重要的。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值