我的终端中的别名从何而来

我的终端中的别名从何而来

每当我在 Windows 上启动 bash 终端(git-bash)并运行时,alias我都会得到以下别名:

$ alias
alias ll='ls -l'
alias ls='ls -F --color=auto --show-control-chars'
alias ltsc='$(npm bin)/tsc'
alias lwbc='$(npm bin)/webpack'
alias node='winpty node.exe'

在我的.bashrc我只有以下内容:

alias lwbc="\$(npm bin)/webpack"
alias ltsc="\$(npm bin)/tsc"

在我的.bash_profile我有以下内容:

test -f ~/.profile && . ~/.profile
test -f ~/.bashrc && . ~/.bashrc

我没有.profile文件。

那么这些来自哪里:

alias ll='ls -l'
alias ls='ls -F --color=auto --show-control-chars'
alias node='winpty node.exe'

更新:

我发现这些别名来自/etc/profile.d/aliases.sh,现在我怎么知道这个文件是从哪里触发的?

答案1

以下是 bash 文档的摘录:

当 bash 作为交互式登录 shell 或带有该选项的非交互式 shell 被调用时--login,它首先从文件中读取并执行命令/etc/profile(如果该文件存在)。读取该文件后,它会按顺序查找~/.bash_profile~/.bash_login、 和~/.profile,并从第一个存在且可读的文件中读取并执行命令。--noprofile当 shell 启动时可以使用该选项来禁止此行为。

由于您已经检查了主目录中的内容.bashrc.bash_profile因此您的问题的答案很可能位于 file 中/etc/profile;一些发行版为所有用户设置默认值,包括别名。如果没有,此配置可能位于上面摘录中提到的其他文件之一中。

答案2

要求 bash 打印启动时运行的命令的跟踪记录。

bash -x

跟踪仅显示执行命令时的命令,不显示它们来自哪个文件。但它们必须来自 bash 正在读取的文件:首先/etc/bash.bashrc(如果在您的系统上启用),然后~/.bashrc加上来自该命令的任何其他文件.,或者source如果使用,则出现在跟踪中。

如果在运行 plain 时未出现别名bash,则仅在登录外壳,那么它们被定义在错误的位置,您应该将它们移动到~/.bashrc.要调查它们当前从何处加载,请运行 bash 的登录实例并启用跟踪:bash -l -x

答案3

我使用 SUSE,并且可以告诉您对于这个发行版,这些别名位于/etc/bash.bashrc.如果您使用 csh 或 tcsh,那么它将位于/etc/csh.cshrc.这些是特定于您的 Linux 发行版的,建议您不要修改它们。相反,以管理员身份创建和编辑/etc/bash.bashrc.local,您会注意到在文件底部/etc/bash.bashrc它将执行 a 操作test -s /etc/bash.bashrc.local,如果文件存在,它将运行它。

我也讨厌那些ls别名。我alias ls='ls $LS_OPTIONS'多年来一直在 中发表评论/etc/bash.bashrc。请注意,当您修补系统并进行内核更新时,该/etc/bash.bashrc文件可能会被覆盖,因此您必须返回并重新编辑。

你提到你正在使用Windows 上的 bash 终端 (git-bash)所以我不知道是否/etc/bash.bashrc特别适合你。

相关内容