如何找到流氓別名聲明?
我正在嘗試查找
alias
已聲明特定內容的位置。我搜尋了所有我知道尋找別名的常用地方:
- ~/.bashrc
- ~/.bash_profile
- /etc/bashrc
- /etc/profile
沒有運氣。
我知道這是
alias
因為當我這樣做時which COMMAND
,我得到:alias COMMAND='/path/to/command' /path/to/command
有沒有辦法找到
alias
只知道alias
名稱的文件聲明?
我會尋找有
/etc/profile.d/
問題的alias
。您還可以執行以下操作來找到它:
grep -r '^alias COMMAND' /etc
這將遞歸地
grep
通過文件尋找以 . 開頭的行alias COMMAND
。如果一切都失敗了,把它放在你的末尾
~/.bashrc
unalias COMMAND
您可以嘗試以下幾件事:
- 用於
bash -v
查看 shell 啟動期間正在讀取哪些行- 用於
bash -x
查看 shell 啟動期間正在執行的命令- 僅使用一個啟動文件執行
重擊 -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
and~/.bash_profile
而不是/etc/bash.bashrc
and~/.bashrc
。重擊 -x
如果
bash -v
沒有給出明確的答案,請嘗試 runningbash -x
,它會列印 shell 正在執行的命令,而不是 shell 正在讀取的行。方法與上面基本相同,只是
-v
改成-x
. (如有必要,您可以同時使用兩者。)僅使用一個啟動文件執行
bash -i --rcfile="$HOME/.bashrc"
看看你是否有別名。
如果您的系統有設置,請嘗試使用相同的
rcfile
設置。/etc/bash.bashrc
然後嘗試
bash -l --rcfile="$HOME/.bash_profile"
並對
profile
名稱中包含的每個 bash 啟動文件執行相同操作,例如更改$HOME/.bash_profile
為/etc/profile
.無論哪種方式使別名出現,都會告訴您應該開始查看的文件。