别名仅在当前shell进程有效,永久生效需写入~/.bashrc并source;带管道或变量时须用单引号;支持参数需改用函数;绕过别名可用命令或绝对路径。

别名只在当前终端生效,永久使用必须写进 ~/.bashrc 并执行 source ~/.bashrc;漏掉任一环节, alias 就等于没设。
alias 命令只在当前 shell 进程里有效
直接运行 alias ll='ls -la' 命令,ll 命令立刻就能使用。不过,一旦你新开终端或者通过SSH重连,这个命令就失效了。这可不是配置错误,而是Bash的设计如此:别名会绑定到当前的shell进程,一旦进程结束,别名也就被销毁了。
- 常见现象:
alias gs='git status'设完,新终端输gs报command not found sudo alias foo='bar'对 root 完全无效——root 的环境独立,普通用户设的 alias 不会继承过去- 验证是否生效:运行
alias ll看输出;若返回空或报错,说明没加载
永久生效必须写对文件 + source
绝大多数桌面环境(如Ubuntu、Debian、CentOS默认终端)启动的是那种非登录shell,它只会读取~/.bashrc;而~/.bash_profile呢,只有在登录shell(像首次SSH连接时)才会被读取一次,平时日常打开终端基本不会触发它的读取。
- 正确操作:
echo "alias ll='ls -la --color=auto'" >> ~/.bashrc && source ~/.bashrc - 别手抖写成
~/.bash_profi或~/.bashrcs—— 路径错,白写 - 别用
bash ~/.bashrc:这会起一个子 shell,改的不是当前环境 - 除非真要全局统一设置,否则别碰
/etc/profile或/etc/bash.bashrc,需要 root 权限且影响所有用户
带管道、变量、空格的别名容易崩
别名本质是字符串替换,定义时不重新解析命令结构。单引号是保命符,双引号反而危险;变量在定义时就被展开,之后改环境变量也无效。
- 正确:
alias psa='ps aux | grep'—— 单引号确保|留到执行时才起作用 - 错误:
alias psa="ps aux | grep"—— 双引号会让 shell 在定义时就尝试执行|,直接报错 alias cdhome='cd $HOME'中的$HOME在定义时就被替换成当前路径,之后改HOME环境变量它也不会变- 想支持参数(比如
ll /tmp)?别名做不到,得用函数:ll() { ls -la --color=auto "$@"; }
绕过别名和末尾空格的特殊用途
设了 alias rm='rm -i' 后,某次想跳过确认,不能硬加 -f(rm -f file 会被展开成 rm -i -f file,-i 和 -f 冲突)。
- 临时绕过:
rm -f file(反斜杠屏蔽 alias 查找)或/bin/rm -f file(绝对路径直调二进制) - 末尾带空格的别名有特殊机制:
alias sudo='sudo '(注意空格),这样sudo apt update才能正常识别后续命令 - 查某个别名:
alias ll;查全部:alias;删一个:unalias ll;删全部(慎用):unalias -a
生命周期、引号规则、参数传递这三块最容易卡住人——尤其是把函数当别名用,或者以为写进 .bash_profile 就能覆盖所有终端场景。