टर्मिनल में एक प्रतीकात्मक लिंक के पूर्ण रूप से हल किए गए पथ को कैसे प्राप्त करें?


47

मैं अपने लैपटॉप पर अजगर प्रतिष्ठानों की एक उलझी हुई गड़बड़ है। मैं निष्पादनयोग्य को देख रहा था /usr/local/binऔर वे सभी प्रतीकात्मक लिंक हैं../../../Library......

इसके आसपास कुछ अजीब व्यवहार है। अगर मैं ls -lhaGदेखता हूं --->और सहानुभूति के अधिकार के सापेक्ष पथ:

lrwxr-xr-x  1 root  wheel    69B Dec  7 22:29 python3 -> ../../../Library/Frameworks/Python.framework/Versions/3.1/bin/python3

हालाँकि, मुझे लगता है कि पथ को हल करने के लिए और python3 के लिए वास्तविक पथ प्रदर्शित करने के लिए कोई भी कमांड लाइन टूल नहीं मिल सकता है। मैं कुछ tidbits यहाँ और वहाँ का उपयोग करने के लिए pwd -Pऔर यह findकरने के लिए उपयोगिता के बारे में पाया है । समस्या यह है कि ये ओएस एक्स पर काम नहीं करते हैं जिस तरह से लोग उन्हें लिनक्स पर काम करने का वर्णन करते हैं (यानी प्रतीकात्मक लिंक के लिए पूर्ण पथ का आउटपुट)। वे सिर्फ मेरे लिए प्रतीकात्मक लिंक पथ मुद्रित करते हैं:

FantasticMrFox:bin robert$ pwd -P python3
/usr/local/bin
FantasticMrFox:bin robert$ find `pwd -P` -name python3
/usr/local/bin/python3

यहाँ क्या हो रहा है पर कोई विचार?

जवाबों:


36

मुझे लगता है कि pwd -Pऔर readlinkइस कार्य के लिए आपके दोस्त बनने जा रहे हैं।

" मैं एक मैक पर जीएनयू के रीडलिंक का व्यवहार कैसे प्राप्त कर सकता हूं? " एक आसान संसाधन है।

pwd -P सिम्लिंक निर्देशिका के अंदर होने पर ही काम करता है:

14:07:13 jason@mac ~ $ cd bin
14:08:08 jason@mac bin $ pwd -P
/Users/jason/Applications

readlink लक्ष्य निर्दिष्ट करके काम करता है (इस प्रकार इसका उपयोग फ़ाइलों के विरुद्ध किया जा सकता है):

14:09:03 jason@mac ~ $ readlink bin
Applications

14:09:34 jason@mac ~ $ readlink /var
private/var

निर्दिष्ट लक्ष्य readlinkके अभिभावक के सापेक्ष उत्पादन प्रतीत होता है ।

उदाहरण के लिए: की मूल /varहै /, इसलिए private/var, सही के सापेक्ष है /। मेरे उपरोक्त उदाहरण के अनुसार bin -> Applications, दोनों मेरी होम डायरेक्टरी में हैं, चाहे मैं इसे चलाता हूं, लेकिन आउटपुट एक ही है।


3
रीडिंकल उस मामले के माध्यम से पुनरावृत्ति नहीं करता है, जहां सिमलिंक अन्य सिमिलिंक की ओर इशारा करता है। मैं यह नहीं कहूंगा कि "पूरी तरह से हल"
जेम्स रोथ

यह ओपी के सवालों के साथ काम करने के लिए प्रकट नहीं होता है जैसे कि चीजों के साथ निर्दिष्ट चीज़ों के प्रति सहानुभूति ../..
user124384

18

यह पुनरावर्ती रूप से हल करता है और एक पूर्ण पथ देता है:

$ python
>>> import os
>>> os.path.realpath("/usr/local/bin/python3")

या गैर-इंटरैक्टिव संस्करण:

python -c "import os; print(os.path.realpath('/usr/local/bin/python3'))"

1
जब निर्माण विफल हो जाते हैं, तो स्क्रिप्टिंग का सहारा लें ... अच्छा। निश्चित रूप से काम करता है: $ python -c "import os; print os.path.realpath('bin')">> /Users/jason/Applications। मैं ~ / बिन ~ / एप्लिकेशन को सिमिलिंक करता हूं ताकि मैक और * निक्स सिस्टम पर एक एकीकृत .bash_profile / $ PATH हो।
जेसन सैलाज

1
यह बहुत अच्छा है और यह अच्छी तरह से काम करता है! मैं इसे उत्तर के रूप में चिह्नित करूंगा, क्योंकि मैं यह भी जानना चाहता हूं कि क्या शेल में ऐसा करने का कोई तरीका है जैसे आप अन्य * nix सिस्टम पर कर सकते हैं।
रॉबर्ट एस सियासियो

1
आप इसे अन्य * निक्स सिस्टम पर कैसे करते हैं? इसके अलावा, आजकल लिनक्स सिस्टम पर लगभग सार्वभौमिक रूप से पायथन स्थापित है।
जेसन सलज

@vxjasonxv सामान मैं समय पर पाया मैं इस के साथ खिलवाड़ किया गया था सुझाव दिया है कि pwdऔर findआदेशों के बारे में मैं सवाल को हल करने में पूरा पथ ओएस एक्स मैं अलावा अन्य सिस्टम पर बात की थी उन्हें हालांकि परीक्षण नहीं किया।
रॉबर्ट एस सियाकियो


1

GNU Coreutils-8.15 ने 2012 में एक नया कमांड-लाइन टूल जोड़ा, realpathजो आपको चाहिए: यह प्रतीकात्मक लिंक की श्रृंखलाओं को हल करता है और परिणाम को पूर्ण (डिफ़ॉल्ट) या सापेक्ष पथ के रूप में आउटपुट करता है।

Apple अभी तक realpathmacOS में शामिल नहीं है (वे दुख की बात है कि सभी GPLv3 टूल्स को छोड़ देते हैं), लेकिन आप इसे आसानी से स्वयं स्थापित कर सकते हैं, जैसे Homebrew का उपयोग करना brew install coreutils:।


-2

आप उपयोग कर सकते हैं readlink -f। यह सभी लिंक के माध्यम से पुनरावृत्ति करता है। मान लीजिए कि लिंक एक पथ है जो आगे एक लिंक है। आप अंतिम निरपेक्ष पथ चाहते हैं।


है ना? आप बिल्कुल क्या कह रहे हैं?
रोब

@DINESH SEHRA जो कह रहा है उसके लिए सही वाक्यविन्यास read link -f python3उदाहरण के लिए उपयोग करना है, और यह आपके लिए पूर्ण प्रतीकात्मक लिंक को बफर कर देगा।
डेनिजेल-जेम्स डब्ल्यू

3
एक OS X उपयोगकर्ता द्वारा स्पष्ट रूप से पोस्ट नहीं किया गया है क्योंकि -fरीडलाइन के OS X संस्करण पर कभी मौजूद नहीं था।
sorin
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.