返回博客

如何为长命令创建 shell 别名

2026-01-313 min read

如果你每天都使用终端,你可能已经一遍又一遍地输入了相同的长命令。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

如果没有返回任何内容,说明你可以安全使用。除非你确切知道自己在做什么,否则应避免覆盖内置命令,如 cdlsrm

当你需要更多控制时:函数 (functions)

别名非常适合简单的映射。但如果你想要一个像 claude danger 这样的子命令呢?别名不支持在名称中使用空格。为此,你需要一个 shell 函数:

claude() {
if [[ "$1" == "danger" ]]; then
shift
command claude --dangerously-skip-permissions "$@"
else
command claude "$@"
fi
}

这会拦截第一个参数。如果它是 danger,它会替换为完整的标志。否则,它会将所有内容原封不动地传递给真正的 claude 二进制文件。

command 关键字在这里很重要。它告诉 shell 调用实际的二进制文件而不是递归调用函数本身。

我最终选择了更简单的 clcld 别名。按键次数越少越好。

使用示例

# 正常启动 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 别名是终端中提升生产力最简单的方法之一。从四十二个字符减少到三个字符,累积起来效果显著。

保持更新

将最新文章和见解发送到您的收件箱。

Unsubscribe anytime. No spam, ever.