Environment-Variables
如何知道哪個文件包含變數定義?
在我的作業系統中:
echo $CLUTTER_IM_MODULE fcitx5
如何知道哪個文件包含變數定義?
我知道我們可以在 .bashrc 或 /etc/bash.bash 中定義 env。
獲取包含 string 的文件要花費很多時間
CLUTTER_IM_MODULE
。sudo grep -r CLUTTER_IM_MODULE /
有沒有聰明的方法來實現我的目標?
如果您確定變數是在 shell 配置文件腳本中定義的,並且您有一個
locate
支持擴展正則表達式和 NUL 分隔輸出(例如mlocate
orplocate
)的版本,您可以執行這樣的東西(這將比執行grep -r
):locate -0 --regex '/(\.(bash_)?profile|(bash)?\.?bashrc|etc/profile.d/|etc/environment$)' | xargs -0r grep -H '[^$]CLUTTER_IM_MODULE='
筆記:
- grep 的
-H
選項確保文件名始終與匹配項一起輸出,即使只返回一個文件名locate
(這不太可能,但無論如何使用 -H 並沒有什麼壞處)。- 您可能也想使用 grep 的
-i
選項進行不區分大小寫的匹配。- 如果在其他位置可以找到 shell 配置文件腳本,或者它們可能具有其他名稱,那麼您需要調整正則表達式以適應。例如,我原來的正則表達式沒有搜尋
/etc/environment
(這是可以在某些系統上定義 shell 變數的另一個地方),所以我添加了它。- 這不會也不能告訴您變數實際定義在哪個文件中,它只能向您顯示可能對變數的目前值負責的文件**(**它無法知道實際執行的是哪個文件,它只能看到變數是在腳本中設置的)。
locate
的數據庫通常每天只更新一次。如果配置文件腳本是在上次執行後創建的,則不會找到該文件。- 根據文件的權限,您可能需要將其執行為:
sudo locate ... | xargs -0r sudo grep -H