Skip to content

Instantly share code, notes, and snippets.

@yumusb
Created April 21, 2025 14:16
Show Gist options
  • Save yumusb/27ed0fac7046d3154354b1c13cb61f4e to your computer and use it in GitHub Desktop.
Save yumusb/27ed0fac7046d3154354b1c13cb61f4e to your computer and use it in GitHub Desktop.
#!/bin/bash
# 下载并写入 ~/.geek_prompt.sh
cat > ~/.geek_prompt.sh <<"EOF"
#!/bin/bash
# 定义颜色(增强对比度)
RESET="\[\033[0m\]"
FG_WHITE="\[\033[1;97m\]" # 亮白色(用户名@主机)
FG_BLUE="\[\033[1;94m\]" # 亮蓝色(路径)
FG_YELLOW="\[\033[1;93m\]" # 亮黄色(Git 分支)
FG_GREEN="\[\033[1;92m\]" # 亮绿色(提示符)
FG_RED="\[\033[1;91m\]" # 亮红色(错误/警告)
# 兼容 macOS/Linux 获取时间的命令
if [[ "$OSTYPE" == "darwin"* ]]; then
DATE_CMD='gdate' # 需要 `brew install coreutils`
else
DATE_CMD='date'
fi
# 获取 Git 分支信息
git_branch() {
branch=$(git symbolic-ref --short HEAD 2>/dev/null || git rev-parse --short HEAD 2>/dev/null)
if [[ -n "$branch" ]]; then
if [[ -n $(git status --porcelain 2>/dev/null) ]]; then
echo " [$FG_RED$branch$RESET]" # 变更时红色
else
echo " [$FG_YELLOW$branch$RESET]" # 正常时黄色
fi
fi
}
# 记录命令开始时间
__cmd_timer_start() {
TIMER_START=$($DATE_CMD +%s)
}
# 计算命令执行时间
__cmd_timer_end() {
local TIMER_END=$($DATE_CMD +%s)
local DIFF=$((TIMER_END - TIMER_START))
if [[ $DIFF -gt 0 ]]; then
CMD_TIME="(${FG_YELLOW}$(printf "%02d:%02d" $((DIFF/60)) $((DIFF%60)))$RESET) "
else
CMD_TIME=""
fi
}
# 记录上一个命令的退出状态
__cmd_exit_status() {
local EXIT_CODE=$?
if [[ $EXIT_CODE -ne 0 ]]; then
EXIT_STATUS="[${FG_RED}✘ $EXIT_CODE${RESET}] "
else
EXIT_STATUS=""
fi
}
# 更新 PS1
__update_prompt() {
PS1="${EXIT_STATUS}${CMD_TIME}${FG_WHITE}\u@\h ${FG_BLUE}\w$(git_branch) ${FG_GREEN}❯ ${RESET}"
}
# 设置 PROMPT_COMMAND 以更新 Prompt
export PROMPT_COMMAND='__cmd_exit_status; __cmd_timer_end; __update_prompt; __cmd_timer_start'
EOF
# 确保 .bashrc 里包含 geek_prompt.sh
if ! grep -q "source ~/.geek_prompt.sh" ~/.bashrc; then
echo "source ~/.geek_prompt.sh" >> ~/.bashrc
fi
# 立即生效
source ~/.geek_prompt.sh
echo "Geek Bash Prompt 已安装并生效!"
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment