سؤال

أنا مرتبك إلى حد ما كيف تعمل الروابط الناعمة في يونيكس. انظر المثال.

% 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**

أليس هذه مشكلة أنه على الرغم من أن الموقع _a هو الموقع ، فإن لديهم مسارات مختلفة؟

هل هناك أمر (بخلاف PWD) من شأنه أن يعطي الموقع الحقيقي لملف (وليس فقط كيف يذهب المستخدم إلى هناك).

يبدو لي أن PWD هو مجرد مجموع قرص مضغوط للمستخدم. ليس موقعهم الحالي.

هل كانت مفيدة؟

المحلول

هذا يتصرف مثل هذا مع الغرض. إذا قمت بالقرص المضغوط إلى /a/b/c/d ثم القرص المضغوط .. ثم تتوقع واقعيا أن تكون في /a/b/c. لو c يحدث أن يكون رابطًا رمزيًا (أو Symlink من حيث Unix - ولكن ليس الرابط الناعم) الذي يأخذك /f/g/h, ، مع السلوك الذي تود أن ينتهي بك الأمر /f/g ثم أنت (أو أي برنامج) لن تفهم كيف وصلت إلى هناك.

نصائح أخرى

محاولة pwd -P. إنها ليست "بخلاف PWD" ولكنها تقوم بالخدعة ، على الأقل على Bash 4.0.35 على Fedora 12. YMMV.

تحديث: حتى يعمل مع 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
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top