Bash

如何找出哪些文件定義了“別名”?

  • November 1, 2017

當我執行alias命令時,我看到一個我不知道它在哪裡定義的別名(即我找不到包含此別名定義的文件)。我檢查了/etc/profile, ~/.bashrc, ~/.profile, ~/.bash_profile,和其他一些~/.bash_login/etc/bash.bashrc但無濟於事。

有沒有辦法找出alias命令從哪些文件中獲取資訊?我的意思是alias命令如何工作?它是否讀取一些預定文件來尋找別名定義?

按照Stéphane 的類似答案,這是一種在跟踪模式下執行互動式 bash shell 的方法(執行單個命令exit),通過管道傳輸到僅顯示sourcealias命令的 grep;source緊鄰感興趣的命令alias應該是包含別名命令的文件。

bash -ix -c exit 2>&1 | grep -E 'source | \. |alias '

檢測執行:

$ tail -1 ~/.bashrc
[ -f /tmp/a.bashrc ] && source /tmp/a.bashrc
$ cat /tmp/a.bashrc
[ -f /tmp/b.bashrc ] && . /tmp/b.bashrc
$ cat /tmp/b.bashrc
alias answer='echo 42'

$ bash -ix -c exit 2>&1 | grep -E 'source | \. |alias '
+ alias 'ls=ls --color=auto'
+ source /tmp/a.bashrc
++ . /tmp/b.bashrc
+++ alias 'answer=echo 42'

引用自:https://unix.stackexchange.com/questions/401736