Home

覆蓋 HOME 位置

  • July 4, 2013

我想在腳本中本地覆蓋使用者的 HOME 位置,以強制應用程序可移植地儲存/載入其設置。

export HOME=$TMPDIR/Data
export XDG_CONFIG_HOME=$TMPDIR/Data

這些在大多數情況下都有效,但仍有一些應用程序仍能找到“真正的”主路徑。

為什麼我覆蓋使用者 HOME 位置的方法不起作用?

不幸的是,這在很大程度上取決於您的應用程序是什麼。應用程序可以通過多種方式獲取使用者的主目錄。

  1. $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.

摘自GLib 參考手冊

請注意,與傳統的 Unix 工具相比,此函式更喜歡 passwd 條目而不是 HOME 環境變數。

  1. 在哪裡

KDE 似乎使用了 $HOME。它將首先查找,如果未設置則KDEHOME 回退到。$HOME/.kde

摘錄KDE 系統管理/KDE 文件系統層次結構

顧名思義,這個目錄樹通常位於使用者的主目錄中。如果未定義此環境變數,則使用預設位置 $HOME/.kde4。

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