我的 .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 函数的脚本与从不同文件调用脚本的别名有什么区别?一个比另一个更可取,如果是,为什么?
直觉告诉我,拥有单独的脚本文件会更好,但我对此没有任何论据。
如果你在你的
~/.bash_aliases
文件中定义这些,这是一个特定于 Ubuntu 的东西,并~/.bashrc
在默认的 Ubuntu 安装中获取,那么是的,因为每次启动新的交互式非登录 shell 时都会获取文件,所以会有开销. 因此,例如,每次打开一个新的终端窗口时。现在,对于现代机器,这种开销很可能无法检测到,但对于较旧的机器、嵌入式系统或者如果您开始定义大量复杂的函数,这可能是一个问题。此外,默认情况下,脚本无法访问以这种方式定义的函数和别名。因此,如果您想在脚本中使用这些功能之一,您将需要明确地 source
.bashrc
(或.bash_aliases
)。如果您将它们作为外部脚本文件包含在 中$PATH
,则不需要。我个人的经验法则归结为所涉及命令的复杂性以及我正在编写的函数/脚本是否可能对非交互式 shell(例如其他脚本)有用。如果我发现自己编写了几十行代码,那么我可能会将其移至脚本中。如果我正在编写可以在许多不同上下文中使用的东西,并且在编写另一个脚本时可能会派上用场,那么我再次将其移至脚本中。
但是,如果我只想要一个简单的小功能,就像您在问题中展示的那样,那只有在交互式运行时才真正有用,那么我会坚持使用功能。因此,这确实取决于您自己的个人喜好,并考虑如何以及何时使用您定义的功能。