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