Created
April 21, 2025 14:16
-
-
Save yumusb/27ed0fac7046d3154354b1c13cb61f4e to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#!/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