Linux 中 alias 失效是非常常见的问题,通常不是 alias 本身坏了,而是使用场景或加载时机不对。下面按最常见原因给你梳理一下。
alias 默认只在交互式 shell 中生效。
例如:
ssh user@host "ll"
bash -c "ll"
这些都不会加载 alias。
✅ 解决:
bash -i -c "ll"
不同 shell 加载的文件不同:
| Shell | 推荐文件 |
|---|---|
| bash | ~/.bashrc |
| zsh | ~/.zshrc |
| 通用 | ~/.profile(不推荐放 alias) |
❌ 错误示例:
~/.bash_profile(非图形/非登录环境不加载)~/.profile(很多情况不读)✅ 正确做法:
echo "alias ll='ls -lh'" >> ~/.bashrc
source ~/.bashrc
alias ll='ls -lh'
# 新开终端才生效,或:
source ~/.bashrc
例如:
alias ll='ls -l'
# 后面又有
alias ll='ls'
检查:
alias ll
alias ll='ls -l'
sudo ll # ❌ 失效
✅ 解决:
sudo alias ll='ls -l' # 没用
正确:
sudo ls -l
脚本中:
#!/bin/bash
ll
❌ 不生效
✅ 解决:
shopt -s expand_aliases
source ~/.bashrc
⚠️ 但不推荐,脚本里用函数更好。
你以为是 bash,其实是:
shdash它们 不支持 alias 或支持极差
检查:
echo $0
echo $SHELL
echo $0
type ll
alias
✅ alias 只用于交互 ✅ 复杂逻辑用函数
mygit() {
git --work-tree=/path "$@"
}
如果你愿意,可以把:
发出来,我可以直接帮你定位是哪一条原因。