Bash

如何找到流氓別名聲明?

  • November 17, 2017

我正在嘗試查找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

您可以嘗試以下幾件事:

  1. 用於bash -v查看 shell 啟動期間正在讀取哪些行
  2. 用於bash -x查看 shell 啟動期間正在執行的命令
  3. 僅使用一個啟動文件執行

重擊 -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/profileand~/.bash_profile而不是/etc/bash.bashrcand ~/.bashrc

重擊 -x

如果bash -v沒有給出明確的答案,請嘗試 running bash -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.

無論哪種方式使別名出現,都會告訴您應該開始查看的文件。

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