![调用脚本的 Bash 别名与将脚本定义为函数](https://linux22.com/image/912733/%E8%B0%83%E7%94%A8%E8%84%9A%E6%9C%AC%E7%9A%84%20Bash%20%E5%88%AB%E5%90%8D%E4%B8%8E%E5%B0%86%E8%84%9A%E6%9C%AC%E5%AE%9A%E4%B9%89%E4%B8%BA%E5%87%BD%E6%95%B0.png)
我的 .bash_aliases 文件中定义了 150 多个快捷方式。其中一些是简单的命令,例如:
# Opens file with default program
o () { xdg-open "$@" & disown; }
# Folder shortcuts
alias ..='cd .. && ls'
其他人正在调用我在机器上其他地方的脚本,例如:
alias i3exit='~/.config/i3/i3exit.sh'
其他的都是像o
上面的命令一样定义的更大的脚本,只有30-80行。
直接定义为 bash 函数的脚本与从其他文件调用脚本的别名之间有什么区别? 其中一个优于另一个吗? 如果是,为什么?
直觉告诉我,拥有单独的脚本文件会更好,但我对此没有任何争论。
答案1
如果您在文件中定义这些内容~/.bash_aliases
(这是 Ubuntu 特有的内容,并~/.bashrc
在默认 Ubuntu 安装中获取),那么确实存在开销,因为每次启动新的交互式非登录 shell 时都会获取该文件。例如,每次打开新的终端窗口时。现在,对于现代机器,这种开销很可能是无法检测到的,但对于较旧的机器、嵌入式系统或如果您开始使用负载定义的复杂函数。
此外,默认情况下,脚本无法访问以这种方式定义的函数和别名。因此,如果您想在脚本中使用其中一个函数,则需要明确地 source .bashrc
(或.bash_aliases
)。如果您将它们作为外部脚本文件放在 中$PATH
,则无需这样做。
我个人的经验法则取决于所涉及命令的复杂性以及我编写的函数/脚本是否可能对非交互式 shell(例如其他脚本)有用。如果我发现自己写了几十行代码,那么我可能会将其移到脚本中。如果我编写的东西可以在许多不同的环境中使用,并且在编写另一个脚本时可能会派上用场,那么我也会将其移到脚本中。
但是,如果我只想要一个简单的小函数,就像您在问题中展示的那样,它只有在交互运行时才真正有用,那么我会坚持使用函数。所以这真的是一个你个人喜好的问题,并考虑如何以及何时使用你定义的函数。