每当我在 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
特别适合你。