プログラムがシンボリックリンクフォルダにあることをどのようにプログラムに通知できますか?

プログラムがシンボリックリンクフォルダにあることをどのようにプログラムに通知できますか?

次のシンボリックリンクフォルダがある場合:

/home/user/foo/foo2 -> /home/user/bar/bar2

私は次のことを行います/home/user/foo/foo2

を実行すると、pwd次のものが返されます/home/user/foo/foo2。すごい!

しかし、もしそうなら、ls ../それは内容を返すでしょう/home/user/bar

プログラムがシンボリックリンクフォルダにあることを知らせる方法はありますか?だからディレクトリに入るとバックリンクに従います。

答え1

一般的にそうではありません。あなたはfoo2にいません。それは幻想です。あなたの殻は幻想を維持しているので、それを見ることができます。しかし、どの子プロセスもそれについて知りません。

$PWD環境変数を確認します。シェルがこれをファントムに設定し、子プロセスがそれを見ることができることを確認してください。ただし、これはユーザーが制御するコードでのみ機能します。 $ PWDを確認しました。他のアプリケーションは(実際には)cwd()を呼び出します。

答え2

pwd現在の出力がシンボリックリンクであることを確認できます。file次のユーティリティを使用してこれを実行できますstat

user@host:~/tmp$ mkdir -p sym/bar/bar
user@host:~/tmp$ mkdir -p sym/foo
user@host:~/tmp$ cd sym/foo/
user@host:~/tmp/sym/foo$ ln -s ../bar/bar/ ./foo
user@host:~/tmp/sym/foo$ ls -l
total 0
lrwxrwxrwx 1 user user 11 Feb 24 17:33 foo -> ../bar/bar/
user@host:~/tmp/sym/foo$ cd foo
user@host:~/tmp/sym/foo/foo$ pwd
/home/user/tmp/sym/foo/foo
user@host:~/tmp/sym/foo/foo$ file $(pwd)
/home/user/tmp/sym/foo/foo: symbolic link to ../bar/bar/
user@host:~/tmp/sym/foo/foo$ stat -c %F  $(pwd)
symbolic link

関連情報