Home
覆蓋 HOME 位置
我想在腳本中本地覆蓋使用者的 HOME 位置,以強制應用程序可移植地儲存/載入其設置。
export HOME=$TMPDIR/Data export XDG_CONFIG_HOME=$TMPDIR/Data
這些在大多數情況下都有效,但仍有一些應用程序仍能找到“真正的”主路徑。
為什麼我覆蓋使用者 HOME 位置的方法不起作用?
不幸的是,這在很大程度上取決於您的應用程序是什麼。應用程序可以通過多種方式獲取使用者的主目錄。
$HOME
你已經知道這個了。
$HOME
是一個可以通過登錄配置覆蓋的環境變數。文件,例如Bash 環境.bashrc
或.bash_profile
在 Bash 環境中。該值通常類似於/home/username
. 2./home/$USER
我認為這是 的變體
$HOME
,但我遇到過愚蠢地假設使用者的主目錄必須在 下的應用程序/home
,因此他們添加了變數$USER
並使用它。 3. 解析/etc/passwd
就獲取使用者主目錄的最糟糕方式而言,這可能是最糟糕的違規行為,但許多工具和腳本都是這樣做的。它們中的大多數是使用
getent
命令的類似內容的變體:$ getent passwd | grep $1 | awk -F: '{ print $6 }' # for example (user "saml") $ getent passwd | grep saml | awk -F: '{ print $6 }' /home/saml
儲存使用者資訊的後端“數據庫”可以是從
/etc/passwd
文件到 NIS 再到 LDAP 數據庫的任何內容。 4. GTK&g_get_home_dir()
GTK 庫提供了一個 API,
g_get_home_dir()
它將從“passwd”後端提取使用者資訊,而不是使用$HOME
.請注意,與傳統的 Unix 工具相比,此函式更喜歡 passwd 條目而不是 HOME 環境變數。
- 在哪裡
KDE 似乎使用了 $HOME。它將首先查找,如果未設置則
KDEHOME
回退到。$HOME/.kde
顧名思義,這個目錄樹通常位於使用者的主目錄中。如果未定義此環境變數,則使用預設位置 $HOME/.kde4。