質問
私はややソフトリンクは、UNIXでどのように機能するかを混乱しています。例を参照してください。
% cd /usr/local/
% ls -la
total 6
drwxr-xr-x 2 root root 512 Jan 19 15:03 .
drwxr-xr-x 41 root sys 1024 Jan 20 16:24 ..
lrwxrwxrwx 1 root root 38 Jan 19 15:03 java -> /otherDir/java/jdk1.6.0_17 **<- this is a soft link**
% cd java **<- move to the softlink**
% pwd
/usr/local/java **<- the current location, say LOCATION_A**
% cd /otherDir/java/jdk1.6.0_17/ **<-move to the location of the softlink**
% pwd
/otherDir/java/jdk1.6.0_17 **<- the new current location, say LOCATION_B**
LOCATION_AがLOCATION_Bであっても、彼らは異なるパスを持っていることを、この問題はありませんか?
ファイルの実際の場所を提供します(PWD以外)コマンドは、(ユーザーがそこに行くだけではなく、どのように)あります。
PWDは、ユーザのCDだけの和であるように、これは、私には思えます。 NOT現在の場所。
解決
この振る舞いは目的でこれが好き。 /a/b/c/d
に..
してからCDへのあなたのCDなら、あなたは現実的に/a/b/c
であることを期待しています。あなたがc
で終わるだろうと、あなた(または任意のプログラム)がないだろう持っていると思い行動して、/f/g/h
にあなたを取ること - /f/g
はシンボリックリンクであることを起こる場合(ただし、ソフト・リンクUNIXの用語でまたはシンボリックリンク)それはそこに着いた方法を理解します。
他のヒント
pwd -P
を試してみてください。それは「PWD以外」ではないのですが、それは、少なくとものFedora 12 YMMVに私のbash 4.0.35上のトリックを、行います。
更新:移植のようですので、でも、sh
で動作します。
あなたは真のディレクトリ名を取得するには、現在の作業ディレクトリにREADLINK使用することができます:
readlink `pwd`
通常、pwd
は、最後の行で/usr/local/java
を返す必要があります。しかし、いくつかのシェルは、試行が現在の作業ディレクトリにシンボリックリンクを扱うより「知的」であることをのビルドでのpwd
コマンドを持っています。
/bin/pwd
を試してみてください、あなたは他の結果を得るのですか?
のrealpath に何を行います欲しいます。
絶対にすべての状況下で、あなたのパスを取得することはできません。これはビット奇数であるが、この(chroot環境とのsetuidプラス)の変化は、時にはプロセスをロックダウンするために使用される。
$ mkdir -p /tmp/a/b $ cd /tmp/a/b $ rmdir /tmp/a/b $ chmod 0 /tmp/a $ rmdir /tmp/a $ ls .. ls: cannot open directory ..: Permission denied $ ls -al total 0 $ pwd -P pwd: error retrieving current directory: getcwd: cannot access parent directories: No such file or directory