简短结论:Ubuntu(以及一般的 Bash)中,alias 默认不能在非交互式脚本里直接使用,但有办法让它生效。
下面分情况说清楚:
在 Bash 中:
alias 只在交互式 shell中默认展开bash test.sh)不会读取 ~/.bashrc 里的 aliasalias ll='ls -l',默认也不会展开示例:
#!/bin/bash
alias ll='ls -l'
ll
直接运行通常会报错:
ll: command not found
#!/bin/bash
shopt -s expand_aliases
alias ll='ls -l'
ll
✅ 可行,但只对本脚本有效
#!/bin/bash
shopt -s expand_aliases
source ~/.bash_aliases
ll
source ~/.bashrc
⚠️ 可能引入大量交互式配置,不干净
ll() {
ls -l "$@"
}
ll
优点:
LS="ls -l"
$LS
| 场景 | 是否可用 alias |
|---|---|
| 终端手动使用 | ✅ |
| bash 脚本 | ❌(默认) |
脚本 + shopt -s expand_aliases |
✅ |
| 函数 | ✅✅✅ |
如果你愿意,我可以帮你把现有 alias 改写成脚本友好的函数版本。