本文共 3551 字,大约阅读时间需要 11 分钟。
想要实现的样子:
#!/bin/bash## DESCRIPTION:## Set the bash prompt according to:# * the active virtualenv# * the branch/status of the current git repository# * the return value of the previous command## USAGE:## 1. Save this file as ~/.bash_prompt# 2. Add the following line to the end of your ~/.bashrc or ~/.bash_profile:# . ~/.bash_prompt## LINEAGE:## Based on work by woods## https://gist.github.com/31967# Set the full bash prompt.function set_bash_prompt () { local LAST_CMD_EXIT_CODE=$? # The various escape codes that we can use to color our prompt. local RED="\[\033[0;31m\]" local YELLOW="\[\033[1;33m\]" local GREEN="\[\033[0;32m\]" local BLUE="\[\033[1;34m\]" local LIGHT_RED="\[\033[1;31m\]" local LIGHT_GREEN="\[\033[1;32m\]" local WHITE="\[\033[1;37m\]" local LIGHT_GRAY="\[\033[0;37m\]" local NC="\[\e[0m\]" # Detect whether the current directory is a git repository. function is_git_repository { git branch > /dev/null 2>&1 } # Determine the branch/state information for this git repository. function set_git_branch { local state remote branch branch_pattern # keep local if ! is_git_repository ; then BRANCH="" return 1 fi # Capture the output of the "git status" command. git_status="$(git status 2> /dev/null)" # Set color based on clean/staged/dirty. if [[ ${git_status} =~ "working directory clean" ]]; then state="${GREEN}" elif [[ ${git_status} =~ "Changes to be committed" ]]; then state="${YELLOW}" else state="${LIGHT_RED}" fi # Set arrow icon based on status against remote. remote_pattern="# Your branch is (ahead|behind)+ " if [[ ${git_status} =~ ${remote_pattern} ]]; then if [[ ${BASH_REMATCH[1]} == "ahead" ]]; then remote="↑" else remote="↓" fi else remote="" fi diverge_pattern="# Your branch and (.*) have diverged" if [[ ${git_status} =~ ${diverge_pattern} ]]; then remote="↕" fi # Get the name of the branch. branch_pattern="^(# )?On branch ([^${IFS}]*)" if [[ ${git_status} =~ ${branch_pattern} ]]; then branch=${BASH_REMATCH[2]} fi # Set the final branch string. BRANCH="${state}(${branch})${remote}${NC} " } # Return the prompt symbol to use, colorized based on the return value of the # previous command. function set_prompt_symbol () { if test $LAST_CMD_EXIT_CODE -eq 0 ; then PROMPT_SYMBOL="\$" else PROMPT_SYMBOL="${LIGHT_RED}\$${NC}" fi } # Determine active Python virtualenv details. function set_virtualenv () { if test -z "$VIRTUAL_ENV" ; then PYTHON_VIRTUALENV="" else PYTHON_VIRTUALENV="${BLUE}[`basename \"$VIRTUAL_ENV\"`]${NC} " fi } # keep variables local to not pollute global namespace. bash is a rash local PYTHON_VIRTUALENV BRANCH PROMPT_SYMBOL set_prompt_symbol $? # Set PROMPT_SYMBOL first so we don't lose the return value of the last command. set_virtualenv set_git_branch # prompt on same line as info # add \u@\h for the hostname PS1="${GREEN}\u@\h${NC} ${PYTHON_VIRTUALENV}${BRANCH}${YELLOW}\w${NC} ${PROMPT_SYMBOL} "}# Tell bash to execute this function just before displaying its prompt.PROMPT_COMMAND=set_bash_prompt
使用:
. xxx
转载地址:http://qccqi.baihongyu.com/