兄弟们,有没有这种场景:
你写 Python 要跑 python3 -m venv .venv && source .venv/bin/activate
你切 Git 分支要敲 git fetch origin && git checkout dev && git pull
你看日志要 tail -f /var/log/app.log | grep ERROR
每次打一遍,手都酸。
alias 大家都知道,但 alias 只能做"简单替换",带不了参数,套不了逻辑。今天教你一招更狠的:Shell 函数 ,配合 ~/.bashrc 模块化,把 80% 的重复操作压缩成 1~2 个字母。
一、为什么函数比 alias 强 10 倍
先看对比:
| 方式 | 带参数 | 判断逻辑 | 组合多命令 | 可调试 |
|---|---|---|---|---|
| alias | ❌ | ❌ | 勉强 | ❌ |
| function | ✅ | ✅ | ✅ | ✅ |
alias 本质就是把字符串原样替换,写个 alias ll='ls -lh' 还能用,一旦想 alias run='python3 $1.py' 就炸了。
函数就不一样了------它是真的"小脚本",能拿 $1$2 当参数,能 if/else,能 return,还能调其它函数。
二、3 个立刻能用的实战函数
直接把这 3 个塞进你的 ~/.bashrc,保存后 source ~/.bashrc 就能用。
1. gco ------ 一个命令搞定拉取+切换+检查
bash
gco() {
local branch="$1"
if [ -z "$branch" ]; then
echo "用法: gco <分支名>"
return 1
fi
git fetch --all --prune
git checkout "$branch"
git pull origin "$branch"
git status --short
}
之前你要敲 4 行,现在 gco develop 就完事。
2. pyrun ------ 自动检测虚拟环境再跑
bash
pyrun() {
local file="$1"
if [ -z "$file" ]; then
echo "用法: pyrun <脚本.py>"
return 1
fi
if [ ! -f "$file" ]; then
echo "❌ 文件不存在: $file"
return 1
fi
if [ -d ".venv" ]; then
echo "🐍 用 .venv 跑: $file"
.venv/bin/python3 "$file"
else
echo "🐍 用系统 python3 跑: $file"
python3 "$file"
fi
}
踩坑说明:我之前写 alias alias run='python3',结果在虚拟环境下它还是会用系统 python,装的库找不到。改成函数判断 .venv 目录是否存在就解决了。
3. llog ------ 带过滤关键词的实时日志
bash
llog() {
local file="${1:-/var/log/syslog}"
local keyword="${2:-}"
if [ -n "$keyword" ]; then
echo "🔍 过滤 $keyword | 文件: $file"
tail -f "$file" | grep --line-buffered "$keyword"
else
echo "📋 查看文件: $file"
tail -f "$file"
fi
}
用法:llog /var/log/app.log ERROR ------ 只打印带 ERROR 的行,还不会阻塞。
⚠️ 注意 grep --line-buffered 这个参数,不加的话 grep 会缓冲输出,你看到日志会延迟几秒,以为是卡了。
三、进阶技巧:让函数带颜色提示
终端里加个颜色判断,一眼知道成功还是失败:
bash
gco() {
local branch="$1"
if [ -z "$branch" ]; then
echo -e "\033[33m[用法]\033[0m gco <分支名>"
return 1
fi
if git fetch --all --prune 2>/dev/null; then
if git checkout "$branch" 2>/dev/null; then
echo -e "\033[32m✅ 已切换到 $branch\033[0m"
git status --short
else
echo -e "\033[31m❌ 分支不存在: $branch\033[0m"
return 1
fi
fi
}
\033[32m 是绿色,31m 红色,33m 黄色,0m 重置。记不住可以搜 ansi color codes bash。
四、终极技巧:~/.bashrc 模块化
别把所有函数都塞一个文件,按用途分:
bash
# 在 ~/.bashrc 最后加这几行
for f in ~/.bashrc.d/*.sh; do
[ -r "$f" ] && . "$f"
done
然后建个目录:
bash
mkdir -p ~/.bashrc.d
分文件存放:
-
~/.bashrc.d/git.sh------ gco, gpl, gp 等 Git 函数 -
~/.bashrc.d/python.sh------ pyrun, venv 等 Python 函数 -
~/.bashrc.d/logs.sh------ llog, glog 等日志函数
好处:
-
新加函数不破坏现有配置
-
不用
source ~/.bashrc重载全部,单文件改了 source 那一个就行 -
可以 git 版本管理
~/.bashrc.d/,换电脑直接拷走
五、验证有没有生效
写完函数最怕------明明写进去了,不生效。两步检查:
bash
# 1. 看函数定义
declare -f gco
# 2. 直接跑一次测试
gco main
如果 declare -f gco 输出了函数体,说明加载了。如果显示 "command not found",那就是 source ~/.bashrc 没跑,或者文件没在 bashrc.d/ 目录里。
总结
-
alias 是"快捷粘贴",函数是"小脚本",能带参数能判断
-
3 个实战函数直接抄走用:gco、pyrun、llog
-
模块化 bashrc,按类别分文件,比塞一个大文件清爽 10 倍
-
验证用
declare -f,别瞎猜
一句话:能写成函数的就别用手敲,能写成 2 个字母的就别写 3 个。
今天的效率秘籍就到这里。明天周日见,聊聊 AI 行业的一些新变化。