更好的缩短 Linux 命令的方法(不是 alias)

发布: (2025年12月13日 GMT+8 11:30)
4 min read
原文: Dev.to

Source: Dev.to

为什么别名不是缩短命令的最佳方式

如果你是新手 Linux 用户,可能会有一个 ~/.bash_aliases 文件,看起来像这样:

alias apup='sudo apt update'
alias apug='sudo apt upgrade'
alias apls='apt list'
alias apsr='apt search'

虽然别名可以方便地缩短冗长的命令,但它们也有几个缺点。

过多的别名会弄乱自动补全

在大多数 shell 中,按 Tab 键会显示自动补全建议。当很多别名共享相同前缀时,建议列表会变得嘈杂:

user@host:~$ ap
apls                    apsr
apt                     apug
apt-add-repository      apup
apt-cache               apt-get
aptitude                apt-mark

别名无法在中间接受参数

别名只能在展开的命令之后接受参数。需要在中间插入参数的命令(例如 ffmpegmagick)无法用别名有效缩短。

别名隐藏了命令的语法

alias gtad='git add .'
alias gtcm='git commit -m '
alias gtps='git push origin main'

这些快捷方式会阻碍你学习实际的命令结构。例如,gtad 不能添加指定的文件,所以在很多情况下你仍需输入完整命令。硬编码的参数(比如 MySQL 登录时的用户名)也会成为限制:

alias sql='sudo mysql -u root -p'

何时别名仍然有用

如果某个命令总是与相同的参数一起使用——比如登录 MySQL shell——可以保留一个简单的别名:

alias la='ls -A'   # 已在许多默认的 ~/.bashrc 文件中出现

但对于需要灵活性的情况,建议使用包装脚本(wrapper script)代替。

使用包装脚本获得灵活性

包装脚本可以读取参数、执行逻辑,同时仍然提供简短的命令名。下面是一个为 Git 注入 token 到远程 URL 的示例:

#!/usr/bin/env bash
# Save this as ~/.local/bin/git (make sure ~/.local/bin is in $PATH)

if [[ $1 == "sync" ]]; then
    # $2 should be /
    /usr/bin/git remote set-url origin "https://$GIT_TOKEN@github.com/$2"
    # add any additional steps here
else
    /usr/bin/git "$@"
fi
  • ~/.bashrc(或其他安全位置)中添加 export GIT_TOKEN=your_token_here,使脚本能够获取 token。
  • 将脚本命名为 git 并放在 $PATH 中比 /usr/bin 更靠前的位置,这样它会覆盖系统的 Git 可执行文件,实现自定义行为,同时将其他所有命令委托给真实的 Git。

现在你可以这样运行:

git sync username/repo-name

相同的思路也适用于其他工具(例如 magickyt-dlp),只需相应地调整参数解析逻辑。


如果想查看更多我的 Git 包装脚本,请点击这里

Back to Blog

相关文章

阅读更多 »

Shell的12天

抱歉,我无法直接访问外部链接。请您提供需要翻译的具体摘录或摘要文本,我将为您翻译成简体中文。

我的 Dev 工具列表 2025

TL;DR  macOS bash AeroSpace 窗口管理器 brew install --cask nikitabobko/tap/aerospace 核心工具 brew install atuin chezmoi gh fzf eza bat ripgrep st…