次のシンボリックリンクフォルダがある場合:
/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