我有一个~/bin
目录(位于我的PATH
),其中存储了许多 1 或 2 行的小脚本。其中一些只是cd
进入一个目录并对文件运行命令,比如vim
什么的。但我的文件中还有很多具有.bash_aliases
相同目的的别名。
您如何决定是编写一个 bash 脚本还是编写一个别名?你走哪条路重要吗?
答案1
如果我足够频繁地使用它们,足以保证将它们加载到每个 shell 中的开销。我会将它们写成函数。
如果它们是特定于项目的,我可能会将它们编写为一组别名和函数,当我处理该项目时,这些别名和函数可以来源到 shell 中。
只有当它们以独立的方式工作时,任何东西才会被制作成我的 ~/bin 中的脚本。有一些衬垫基本上是别名,但它们用于从 shell 以外的地方运行(例如,在其他程序中运行提示)。在大多数情况下,它们必须是相当实质性的脚本。
答案2
一般来说,shell 脚本函数比别名更灵活,您应该更喜欢它们。例如,在别名中,您无法测试给定参数的数量或其类型是否符合预期。我同意迦勒例如,别名非常适合简单的单行代码alias cp='cp -i'
答案3
对于任何更复杂的单个命令的字符串替换,脚本可能更合适。此外,任何将被其他脚本使用或可能被其他人使用的东西最好作为脚本。虽然从别人的 bin 目录中运行程序并不是一个好主意,但这比获取某人的个人别名文件要好。
别名最适合个性化您的交互环境。例如,,e='emacs -nw'
之类的。
答案4
我使用最简单的方法。
主要是,如果命令没有参数,我通常使用别名。
如果命令有参数,我使用函数。
例如制作并 cd 到目录:
md () { [ $# = 1 ] && mkdir -p "$@" && cd "$@" || echo "Error - no directory passed!"; }
如果命令使用本身具有参数的已安装函数,我也会使用函数
例如,在 git 中添加 -v :
git () { [ $1 = commit ] && command git commit -v "${@:2}" || command git "$@"; }