反对别名的案例
快速浏览一下这里的时间线,你会发现 shell 别名是一个热门话题。shell 函数、git 别名和包装器脚本仍然很流行,但程度略低。
喜欢别名并没有错!
但我认为,就像所有事情一样,在做某件事之前你应该明白自己在做什么。
复制粘贴
当你使用别人的别名时,通常是直接粘贴一大堆,或者直接下载整个文件。你有没有仔细阅读并理解所有内容?里面是不是有什么恶意的内容?是不是有一些不太恶意,只是为了开玩笑而加进去的?
货物崇拜
你在互联网上看到的一些别名非常主观。举个简单的例子,mkdir
shadow应该被使用吗command mkdir -p
?你知道为什么这么做吗?还是这只是别人的偏好?
递归
如果一个别名调用另一个别名,而另一个别名又调用另一个别名(或自身),会发生什么情况?
通常可以通过command
在适当的情况下明确指定别名的使用方式,或者确保提供别名的脚本顺序正确且注释清晰,来解决这个问题。
我敢打赌你得花几秒钟才能弄清楚。
效率
alias gcma='git commit -a -m'
打字肯定gcma
比打字更高效git commit -a -m
吧?这难道不明显吗?当然,前提是你已经把它变成了肌肉记忆。在此之前,你需要一段学习期,每次都要查阅或理解你使用的缩写。
可预测性
如果它是一个别名,你会记得消息参数gcma
是必需的,并且必须用引号括起来,因为它是一个单独的参数吗?
如果你把它构建成一个shell函数……
gcma() {
git commit -a -m "$@"
}
...而不是使用别名来包含引号,这样您就可以输入gcma foo bar baz
,如果您第二次包含它们,或者您完全忘记了该消息,它会做什么?
如果您想将另一个参数传递给git commit
,例如 ,该怎么办--squash
?您可以使用那里的别名,但不能直接使用函数本身。省去输入额外引号的巧妙做法限制了您的选择。
当您拥有一长串快捷方式时,您能否在不亲自测试的情况下预测所有别名的行为?
可用性(本地)
如果您习惯使用某个程序的别名,而现在尝试在终端会话之外的某个地方使用它,您确定知道会发生什么吗?如果脚本或代码行中的别名cron
正在隐藏可执行文件,它要么不起作用,要么会执行其他操作。您是否有足够的信心,因为您已经非常依赖别名,以至于它已经成为您的第二天性,所以您不会犯错?
可移植性(远程)
当你使用外部系统时,你的别名就不存在了。如果你出于某种原因进入了 VPS 或本地容器,你该怎么办?如果你被所有那些推广文章所吸引zsh
,决定尝试使用不同的 shell,该怎么办?
阴影(系统之间)
如果您没有注意到别名不存在,但您输入的命令却没有按预期执行,因为您已在本地对其进行了阴影处理,该怎么办?您思考了一会儿,打开页面man
浏览了一下,想知道一切以前是如何运作的,是自己记性不好还是有点疯了。
审计线索
查看你的shell历史记录,找出上周遇到同样问题时的操作——你还记得要搜索什么吗?是隐藏的别名还是完整的命令?究竟隐藏了什么?
让我借用一下Python 之禅:
明确优于隐晦。
可读性很重要。
这些警告主要是为了提醒你何时何地使用了别名。别名确实很方便,但是……一定要小心,好吗?
封面图片(基本无关)来自morguefile.com的 ArielleJay
鏂囩珷鏉ユ簮锛�https://dev.to/moopet/the-case-against-aliases-2mb1