我正在尝试查找alias
已声明特定内容的位置。我已经搜索了所有我知道的常见位置来寻找别名:
没有运气。
我知道这是alias
因为当我这样做时which COMMAND
,我得到:
alias COMMAND='/path/to/command'
/path/to/command
Run Code Online (Sandbox Code Playgroud)
有没有办法找到哪个文件声明alias
只知道alias
名称?
uto*_*und 32
我会寻找/etc/profile.d/
冒犯的alias
。
您还可以执行以下操作来找到它:
grep -r '^alias COMMAND' /etc
Run Code Online (Sandbox Code Playgroud)
这将grep
通过文件递归查找以alias COMMAND
.
如果一切都失败了,把它放在你的最后 ~/.bashrc
unalias COMMAND
Run Code Online (Sandbox Code Playgroud)
Mik*_*kel 28
您可以尝试以下几点:
bash -v
查看 shell 启动期间正在读取哪些行bash -x
查看 shell 启动期间正在运行的命令bash -v
该-v
选项bash
在读取时打印它读取的每个脚本文件中的每一行。
从跑步开始
bash -i -v >bash-i.out 2>&1
Run Code Online (Sandbox Code Playgroud)
等待 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
Run Code Online (Sandbox Code Playgroud)
这告诉 bash 是一个登录 shell,它读取一些不同的启动文件,例如/etc/profile
and~/.bash_profile
而不是/etc/bash.bashrc
and ~/.bashrc
。
bash -x
如果bash -v
没有给您明确的答案,请尝试 running bash -x
,它会打印 shell 正在运行的命令,而不是 shell 正在读取的行。
方法与上述基本相同,只是-v
改为-x
。(如有必要,您可以同时使用两者。)
仅使用一个启动文件运行
bash -i --rcfile="$HOME/.bashrc"
Run Code Online (Sandbox Code Playgroud)
看看你有没有别名。
如果您的系统有rcfile
set to,请尝试相同的设置/etc/bash.bashrc
。
然后试试
bash -l --rcfile="$HOME/.bash_profile"
Run Code Online (Sandbox Code Playgroud)
并对profile
名称中包含的每个 bash 启动文件执行相同操作,例如更改$HOME/.bash_profile
为/etc/profile
.
无论哪种方式使别名出现,都会告诉您应该开始查看的文件。