调用脚本的 Bash 别名与将脚本定义为函数

调用脚本的 Bash 别名与将脚本定义为函数

我的 .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(例如其他脚本)有用。如果我发现自己写了几十行代码,那么我可能会将其移到脚本中。如果我编写的东西可以在许多不同的环境中使用,并且在编写另一个脚本时可能会派上用场,那么我也会将其移到脚本中。

但是,如果我只想要一个简单的小函数,就像您在问题中展示的那样,它只有在交互运行时才真正有用,那么我会坚持使用函数。所以这真的是一个你个人喜好的问题,并考虑如何以及何时使用你定义的函数。

相关内容