【效率秘籍】Shell 函数+别名组合拳,让 80% 的重复命令变 1 个字母

兄弟们,有没有这种场景:

你写 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 等日志函数

好处:

  1. 新加函数不破坏现有配置

  2. 不用 source ~/.bashrc 重载全部,单文件改了 source 那一个就行

  3. 可以 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 行业的一些新变化。

相关推荐
SEONIB_Explorer1 小时前
2026独立站AI收录底层逻辑:为什么内容可被Google收录,却无法被AI检索引用?
大数据·人工智能·跨境电商·视频制作·seonib·veonib
码农学院1 小时前
Elasticsearch构建汽车零配件智能搜索与匹配系统
大数据·elasticsearch·汽车
龙孚信息10 小时前
DXP进化论 贰-品牌出海深水区,你的数字体验基础设施跟上了吗?
大数据
kirs_ur12 小时前
SSD 在 AI 训练中的角色
大数据·服务器·人工智能
AI探索先锋12 小时前
AMD 2nm 芯片炸裂、欧洲首家人形机器人独角兽诞生、AI Agent 互联标准打响:10 条信号看懂产业变局|今日科技 AI 机器人快讯
大数据·人工智能·深度学习·搜索引擎·机器人
zzzll111113 小时前
字节 Agent 三面:讲讲 Agent 的记忆系统怎么设计?
大数据
聚焦前沿13 小时前
涡街流量计用户如何判断厂家是否靠谱
大数据·人工智能
莫名的好感°15 小时前
国内AI视频工具哪家强?FusionAI聚合即梦Seedance、可灵Kling、HappyHorse、Google Veo,一个平台看懂所有选择
大数据·人工智能