Bash

是否可以檢查別名的定義位置?

  • October 3, 2019

別名,例如llalias命令定義的。

我可以檢查命令,比如type ll哪些列印

ll is aliased to `ls -l --color=auto'

或者command -v ll哪個列印

alias ll='ls -l --color=auto'

或者alias ll也列印

alias ll='ls -l --color=auto'

但我似乎無法找到定義別名的位置,即諸如 的文件.bashrc,或者可能在正在執行的 shell 中手動找到。在這一點上,我不確定這是否可能。

我應該簡單地瀏覽所有載入的文件bash並檢查每個文件嗎?

grep儘管要求 shell 顯示它在做什麼,然後應該幫助在 rc 文件中找到那些設置,但手動定義將很難發現(可能是歷史日誌) :

bash -ixlc : 2>&1 | grep ...
zsh -ixc : 2>&1 | grep ...

如果 shell 沒有通過上述呼叫之一(以互動方式執行 null 命令)精確地擷取必要的選項,那麼script

script somethingtogrep thatstrangeshell -x
...
grep ... somethingtogrep

另一種選擇是使用類似stracesysdig查找外殼接觸的所有文件,然後grep手動執行這些文件(如果外殼或程序沒有-x標誌,則很方便);標準的 RC 文件不足以手動檢查文件名是否像 oh-my-zsh 或特定於站點的配置正在從誰知道哪裡提取程式碼(或者也可能存在環境變數,正如 sorontar 在他們的回答中指出的那樣) .

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