家の場所をオーバーライド

家の場所をオーバーライド

アプリケーションが自分の設定をポータブルに保存/ロードするように、スクリプト内のローカルでユーザーのホームポジションをオーバーライドしたいと思います。

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

これはほとんどの場合うまくいきますが、まだ「実際の」デフォルトパスを見つけることができるいくつかのアプリケーションがあります。

ユーザーの自宅の場所をオーバーライドする方法が機能しないのはなぜですか?

答え1

残念ながら、これはあなたのアプリケーションが何であるかによって大きく異なります。アプリケーションはさまざまな方法でユーザーのホームディレクトリを表示できます。

  1. $HOME

    あなたはすでにこれを知っています。$HOMEログイン構成でオーバーライドできる環境変数。たとえば、ファイル.bashrcまたは.bash_profileBash 環境のファイルです。値は通常/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ライブラリはg_get_home_dir()$HOME

    から抜粋GLibリファレンスマニュアル

    従来のUnixツールと比較して、この機能はHOME環境変数のpasswdエントリを好みます。

  5. ケード

    KDEは$ HOMEを使用しているようです。最初に見て、設定されていない場合KDEHOME に戻ります。$HOME/.kde

    抜粋KDEシステム管理/ KDEファイルシステム層

    名前が示すように、このディレクトリツリーは通常ユーザーのホームディレクトリにあります。この環境変数が定義されていない場合は、デフォルトの場所$ HOME / .kde4が使用されます。

答え2

現在のユーザーのホームディレクトリを取得する方法は2つあります。

  • 1つの方法は、ユーザーのパスワードエントリ(で/etc/passwd)を見ることです。
  • HOME別の方法は環境変数を調べることです。$HOME実際にはpasswdエントリで設定されます。これを設定できるアプリケーションには、ターミナルエミュレータ、ログインマネージャ、sudoが含まれます。

なりすましできないアプリケーションがユーザーのパスワードエントリを表示している可能性があります。また、ユーザーのホームディレクトリをどこかに保存し(おそらくファイルまたはディレクトリへの絶対パスの一部として)、HOMEpasswdエントリをすべて無視することもできます。

アプリケーションがHOME環境変数を使用しているかどうかを確認する1つの方法は、grepを使用することです。たとえば、使用できることを示すがgrep HOME /usr/bin/pdftex返されます。Binary file /usr/bin/pdftex matchespdftex$HOME

より明確な答えを得るために、アプリケーションのソースコードを見てください。ソースコードの分析速度をわずかに上げる
ために使用されます。grep -r 'getenv\s\?(.*HOME'

関連情報