我正在尝试查找alias
已声明特定内容的位置。我搜索了所有我知道的常用地方来寻找别名:
- ~/.bashrc
- 〜/ .bash_profile
- /etc/bashrc
- /etc/配置文件
没有运气。
我知道这是alias
因为当我这样做时which COMMAND
,我得到:
alias COMMAND='/path/to/command'
/path/to/command
有没有办法找到哪个文件声明alias
只知道alias
名称?
答案1
我会调查/etc/profile.d/
是否有违规行为alias
。
您还可以执行以下操作来查找它:
grep -r '^alias COMMAND' /etc
这将递归地grep
通过文件查找以 开头的行alias COMMAND
。
如果所有其他方法都失败,请将其放在最后~/.bashrc
unalias COMMAND
答案2
您可以尝试以下几件事:
- 用于
bash -v
查看 shell 启动期间正在读取哪些行 - 用于
bash -x
查看 shell 启动期间正在运行哪些命令 - 仅使用一个启动文件运行
bash-v
该-v
选项使得bash
在读取时打印它读取的每个脚本文件中的每一行。
从跑步开始
bash -i -v >bash-i.out 2>&1
等待 5-10 秒,然后按Ctrl+C。
这将为您提供一个名为的文件bash-i.out
,就像所有启动文件合并(或连接)在一起一样。
然后使用less
打开文件并使用 搜索别名/aliasname
。
现在,比较该别名相对于文件中其他行的出现位置。例如,在大多数系统上,/etc/bash.bashrc
顶部都有一条注释,表示/etc/bash.bashrc
并且~/.bashrc
也有一个。
如果它位于您的顶部之上,那么它可能是定义别名的~/.bashrc
启动文件,否则它位于您的文件或通过或(点命令)包含的文件中。/etc
~/.bashrc
source
.
如果没有显示别名,请尝试
bash -l -v >bash-l.out 2>&1
这告诉 bash 是一个登录 shell,它读取一些不同的启动文件,例如/etc/profile
和~/.bash_profile
而不是/etc/bash.bashrc
和~/.bashrc
。
bash-x
如果bash -v
没有给您明确的答案,请尝试 running bash -x
,它会打印 shell 正在运行的命令,而不是 shell 正在读取的行。
方法与上面基本相同,只是-v
改为-x
. (如有必要,您可以同时使用两者。)
仅使用一个启动文件运行
bash -i --rcfile="$HOME/.bashrc"
看看你是否有别名。
如果您的系统有的话,请尝试使用rcfile
set to进行相同的操作。/etc/bash.bashrc
然后尝试
bash -l --rcfile="$HOME/.bash_profile"
profile
并对名称中包含的每个 bash 启动文件执行相同的操作,例如更改$HOME/.bash_profile
为/etc/profile
.
无论哪种方式显示别名都会告诉您应该开始查看的文件。
答案3
也许你的.xinitrc
?您还应该检查其中是否有您的.bashrc
或.bash_profile
来源的任何其他文件。例如,我将所有别名保存在以下命令引用的单独文件中:
[ -f ~/.bash_alias ] && source $HOME/.bash_alias
一些可能也有帮助的问题:这是针对普通用户还是根用户?是哪个命令? Linux 是什么风格?
答案4
我遵循将别名定义放入的非常常见的做法
~/.bash_aliases
然后从 .bashrc 调用它
[ -f ~/.bash_aliases ] && source $HOME/.bash_aliases