如何为长命令创建 shell 别名
如果你每天都使用终端,你可能已经一遍又一遍地输入了相同的长命令。Shell 别名(alias)可以让你创建快捷方式,从而避免重复劳动。
问题所在
我经常使用 Claude Code,有时我需要使用 --dangerously-skip-permissions 标志来运行它。每次都输入这个标志很快就会让人厌烦:
claude --dangerously-skip-permissions
这有 42 个字符。我想要一个可以不假思索就能输入的东西。
简单的解决方案:别名 (aliases)
最快的解决方法是使用一个简单的 shell 别名。将以下内容添加到你的 ~/.zshrc(如果你使用 bash,则添加到 ~/.bashrc):
# Claude 快捷方式
alias cl="claude"
alias cld="claude --dangerously-skip-permissions"
然后重新加载你的 shell:
source ~/.zshrc
就是这样。现在:
cl运行claude(2 个字符代替 6 个)cld运行claude --dangerously-skip-permissions(3 个字符代替 42 个)
两者都接受额外的参数。cld -m "fix the bug" 的效果与 claude --dangerously-skip-permissions -m "fix the bug" 完全相同。
选择名称之前:检查冲突
在创建别名之前,请确保该名称没有被你系统上的另一个命令占用:
which cl 2>/dev/null
which cld 2>/dev/null
type cl 2>/dev/null
type cld 2>/dev/null
如果没有返回任何内容,说明你可以安全使用。除非你确切知道自己在做什么,否则应避免覆盖内置命令,如 cd、ls 或 rm。
当你需要更多控制时:函数 (functions)
别名非常适合简单的映射。但如果你想要一个像 claude danger 这样的子命令呢?别名不支持在名称中使用空格。为此,你需要一个 shell 函数:
claude() {
if [[ "$1" == "danger" ]]; then
shift
command claude --dangerously-skip-permissions "$@"
else
command claude "$@"
fi
}
这会拦截第一个参数。如果它是 danger,它会替换为完整的标志。否则,它会将所有内容原封不动地传递给真正的 claude 二进制文件。
command 关键字在这里很重要。它告诉 shell 调用实际的二进制文件而不是递归调用函数本身。
我最终选择了更简单的 cl 和 cld 别名。按键次数越少越好。
使用示例
# 正常启动 claude
cl
# 以危险模式启动 claude
cld
# 传递额外参数
cld -m "修复认证错误"
cl -m "解释这个函数"
将模式应用于任何内容
这适用于你经常输入的任何命令:
# Docker 快捷方式
alias dc="docker compose"
alias dcu="docker compose up -d"
alias dcd="docker compose down"
# Git 快捷方式
alias gs="git status"
alias gp="git push"
alias gl="git log --oneline -10"
从你输入最多的命令开始。运行 history | awk '{print $2}' | sort | uniq -c | sort -rn | head -10 来找出你最常用的命令,并为最长的命令设置别名。
Shell 别名是终端中提升生产力最简单的方法之一。从四十二个字符减少到三个字符,累积起来效果显著。