現在のユーザーのホームディレクトリへの標準シンボリックリンクはありますか?

現在のユーザーのホームディレクトリへの標準シンボリックリンクはありますか?

シェルは~ホームディレクトリに展開できます。 $HOME通常、同じ処理があるがこれらの拡張をサポートしない可能性があるコンテキストで現在のユーザーのホームディレクトリを参照することがよくあります。

私のプロフィールはうまく$HOMEいきますが、うまく~いかず、その逆も同じです。

ヒューズが次のようなものを提供できると思います/var/myself->$HOME

これにより、構成ファイルに値を入れて、次の項目を指すことができます。/var/myself/backdrops/pornography/wtf/yarly.jpg

すでにそのようなことがありますか?そうでなければ、このようなことが起こってはならない正当な理由はありますか?

答え1

あなたの懸念を理解していますが、答えは「いいえ」です。そんなことはありません。
一般的なアプローチは、オペレーティングシステムにユーザーのホームパスを要求するか、$ HOME変数を取得することです。

これらすべてのオプションには、常にアプリケーションの一部のコーディングが必要です。 Bashのような多くのアプリケーションは「エイリアス」を提供します〜(open(2)ではそれを翻訳しません)。

もちろん、この目的のためにvfsまたはヒューズモジュールを使用することができます。やるべきことがあるかもしれないので尋ねなければなりません!

しかし、本当に必要ですか?次の回避策を使用できます。

答え2

1つの秘密(少なくともLinuxでは)は、$HOMEアプリケーションを実行する前にディレクトリを変更してから構成/proc/self/cwd/...ファイルで使用することです。

答え3

ほとんどのプログラムでは、コマンドラインから設定ファイルへのパスを指定できます。したがって、標準設定ファイルを使用してフィルタリングして、$HOME現在のユーザーなどのエントリを置き換えてから、変更された一時設定ファイルをプログラムに渡すラッパーを作成できます。

答え4

要求しているユーザーのpidを取得し、システムにホームディレクトリを要求できます。だから可能です。

しかし、SUIDのないプログラムがFSを静的であると仮定しているかどうかはわかりません。

編集する:

struct fuse_context *ctx = fuse_get_context ();
struct passwd pwd, *ppwd;
char buffer[1024];
int status = getpwuid_r (ctx->ui, &pwd, buffer, sizeof(buffer), &ppwd);
if (status == 0) {
  if (ppwd == NULL) {
    // No record found
  } else {
    // Handle record
  }
} else {
    // Handle error
} 

上記のコードは理想的ではありませんが、一般的な状況では機能します。

関連情報