【问题标题】:Alias not updated after using source .bashrc使用源 .bashrc 后别名未更新
【发布时间】: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,“几乎所有目的”都是轻描淡写的;不需要使用别名。

标签: linux bash shell alias


【解决方案1】:

采购.bashrc 并不清楚您到目前为止定义的内容。它只是将它包含的定义添加到您当前的环境中。

如果您想取消定义给定的别名,只需键入:

$ unalias ls
$ source .bashrc

如果要取消定义所有别名:

$ unalias -a
$ source .bashrc

最后,如果你想用一个全新的 shell 重新开始,你当然可以关闭你的会话并重新打开一个,但这里有一个几乎相同的命令,以防这不是那么容易 (ssh) 或不受欢迎:

$ exec bash

(您也可以添加-l 选项来模拟登录shell,从而读取您的~/.bash_profile 文件)

【讨论】:

猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-04-04
  • 2017-03-12
  • 1970-01-01
  • 2011-07-19
  • 1970-01-01
  • 2012-04-23
相关资源
最近更新 更多