【发布时间】:2021-06-03 14:16:24
【问题描述】:
我正在测试登录时的 bash 行为(终端 1),但我对它与别名的交互感到困惑:
我用vim .bashrc 打开并添加了这一行:
alias ls='ls -l'
并使用:x 保存它
然后我用source .bashrc模拟了一个新的登录会话,我在别名列表中找到了它
但我从 .bashrc 中删除了别名并再次使用 source .bashrc 我看到 alias ls='ls -l' 仍然可用。另一方面,打开新的shell终端(终端2)问题就解决了。
问题:为什么alias ls='ls -l' 在第一个终端没有被删除?
【问题讨论】:
-
source不会“模拟新登录”,它只是在当前 shell 中执行文件中的操作。这些操作都没有删除别名。 -
我的意思是我使用源而不是再次登录。但是你剩下的句子没看懂,你能解释一下吗?
-
source .bashrc基本上与将内容.bashrc复制粘贴到您的 shell 中相同。如果您复制粘贴echo Hello; alias ls='ls -l',那么您会期望写入Hello 并定义别名。如果您之后复制粘贴echo Hello,您不会期望ls别名消失。这里也一样。 -
非常感谢,现在清楚了:)
-
请注意 bash 手册页中的评论,我相信该评论早于 1996 年:“对于几乎所有目的,别名都被 shell 函数所取代。” IMO,“几乎所有目的”都是轻描淡写的;不需要使用别名。