GNU/Linux >> Linux の 問題 >  >> Linux

シンボリック リンクの環境変数

シンボリック リンクはカーネルによって解決されますが、LD_PRELOAD トリックを実行して、パス名を受け取るすべての libc 関数をラップし、'readlink' (パラメーター展開) によって返される文字列内の $XYZ コンポーネントを展開することができます。次に、展開されたパスをラップされた関数にフィードします。 jaztik が提案するように、リンクを作成するときにシェル展開からターゲット パスをエスケープする必要があります。

注入されたライブラリはユーザーの環境に完全にアクセスできるため、これは OP のすべての期待を満たします。


はい。問題なし。実際には、実際にはリンクで $HOME 変数を使用するわけではないため、たとえばユーザー グループのスマート ソリューションでは機能しません。変数はコマンドの実行時にシェルによって変換され、変数の内容がリンクで使用されます。

ln -s ~/test /tmp/test 

に展開されます
/<path>/<to>/home/test -> /tmp/test

ああ。 ln を呼び出している人の環境変数のみが機能します。リンクに他の人の環境変数を保存することはできません。変数は、コマンドを呼び出す前に展開されます。


リンク内の変数を展開したくない場合は、一重引用符で囲みます。

ln -s '$HOME/file/or/folder' newname

これにより、

newname -> $HOME/file/or/folder

ローカルに設定された $HOME に展開するのではなく。他の回答で説明されているように、まったく展開されません。だから、例えばすることができます。それを使用して、リテラル $HOME 内のファイルにシンボリック リンクします。

[これはシステムに依存することに注意してください - すべてのシステムがバリアント シンボリック リンクをサポートしているわけではありません]


シンボリック リンクはカーネルによって処理され、カーネルは環境変数を気にしません。だから、いいえ。


Linux
  1. * in * / etc / environment?で環境変数を参照する

  2. 環境変数の確認

  3. 一時的な環境を設定する ($PATH)

  1. 多くの環境変数の設定を解除する方法

  2. シンボリックリンクをコピーするには?

  3. Linux 環境変数の設定

  1. Linuxでハードリンクとシンボリックリンクを作成する方法

  2. シンボリック リンクでの cd/bash の動作

  3. プロセスの環境変数を読み取る方法