アプリケーションが自分の設定をポータブルに保存/ロードするように、スクリプト内のローカルでユーザーのホームポジションをオーバーライドしたいと思います。
export HOME=$TMPDIR/Data
export XDG_CONFIG_HOME=$TMPDIR/Data
これはほとんどの場合うまくいきますが、まだ「実際の」デフォルトパスを見つけることができるいくつかのアプリケーションがあります。
ユーザーの自宅の場所をオーバーライドする方法が機能しないのはなぜですか?
答え1
残念ながら、これはあなたのアプリケーションが何であるかによって大きく異なります。アプリケーションはさまざまな方法でユーザーのホームディレクトリを表示できます。
$HOME
あなたはすでにこれを知っています。
$HOME
ログイン構成でオーバーライドできる環境変数。たとえば、ファイル.bashrc
または.bash_profile
Bash 環境のファイルです。値は通常/home/username
。/home/$USER
私はこれがのバリエーションだと思いますが、ユーザーのホームディレクトリが下にある必要があると愚かであると仮定して、その変数を追加して使用するいくつかの
$HOME
アプリケーションに会いました。/home
$USER
分析する
/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データベースなど何でもよい。GTK&
g_get_home_dir()
GTKライブラリは
g_get_home_dir()
。$HOME
から抜粋GLibリファレンスマニュアル
従来のUnixツールと比較して、この機能はHOME環境変数のpasswdエントリを好みます。
ケード
KDEは$ HOMEを使用しているようです。最初に見て、設定されていない場合
KDEHOME
に戻ります。$HOME/.kde
名前が示すように、このディレクトリツリーは通常ユーザーのホームディレクトリにあります。この環境変数が定義されていない場合は、デフォルトの場所$ HOME / .kde4が使用されます。
答え2
現在のユーザーのホームディレクトリを取得する方法は2つあります。
- 1つの方法は、ユーザーのパスワードエントリ(で
/etc/passwd
)を見ることです。 HOME
別の方法は環境変数を調べることです。$HOME
実際にはpasswdエントリで設定されます。これを設定できるアプリケーションには、ターミナルエミュレータ、ログインマネージャ、sudoが含まれます。
なりすましできないアプリケーションがユーザーのパスワードエントリを表示している可能性があります。また、ユーザーのホームディレクトリをどこかに保存し(おそらくファイルまたはディレクトリへの絶対パスの一部として)、HOME
passwdエントリをすべて無視することもできます。
アプリケーションがHOME
環境変数を使用しているかどうかを確認する1つの方法は、grepを使用することです。たとえば、使用できることを示すがgrep HOME /usr/bin/pdftex
返されます。Binary file /usr/bin/pdftex matches
pdftex
$HOME
より明確な答えを得るために、アプリケーションのソースコードを見てください。ソースコードの分析速度をわずかに上げる
ために使用されます。grep -r 'getenv\s\?(.*HOME'