【效率秘籍】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 行业的一些新变化。

相关推荐
guwentian19 小时前
Git Worktree 实战:用并行多 Agent 把开发提速 N 倍
大数据·git·elasticsearch·wroktree
2503_931712481 天前
OpenInsight领衔:企业AI数据分析平台(Data Agent/智能问数/智能数据报告)
大数据
朴马丁1 天前
国际与国产PLM在精细化工赛道的布局:2026年主要厂商技术特色
大数据·运维·人工智能·流程行业plm·化工新材料
~央千澈~1 天前
从“拟声”到“生成”:AI音效背后的技术原理·优雅草AI音乐·AI音乐技术研究
大数据·人工智能·ai·音频
Elastic 中国社区官方博客1 天前
Elasticsearch:使用 AI Agent 来创建 workflow
大数据·运维·人工智能·elasticsearch·搜索引擎·自动化·全文检索
阿里云大数据AI技术1 天前
AI Search+ES 9.4.X最佳实践:“更快、更准、更安全的企业级搜索引擎”"为AI Agent提供坚实底座”
人工智能·elasticsearch·agent
大大大大晴天1 天前
高并发报表与多维分析场景下,StarRocks 应该怎样用
大数据
哥本哈士奇1 天前
dbt+SQLServer构建数据仓库(10):macro 以及 data vault的应用实例
大数据·数据仓库·sqlserver
阿里云大数据AI技术1 天前
DataWorks Data Agent 7月升级: Qwen3.8-max 加持、管住 Token、打通 IM、铺向全球
大数据·人工智能·agent
2601_955759881 天前
如何降低 Claude API 批量生产返工率
大数据·人工智能·算法