जवाबों:
एक सिम्लिंक वास्तव में आपके द्वारा दिए गए पथ को स्टोर करता है, एक स्ट्रिंग के रूप में। इसका मतलब है कि आपके लिंक ~/mylinkमें " ." (एक वर्ण) है। जब आप लिंक का उपयोग करते हैं, तो उस पथ की व्याख्या उस लिंक के अनुसार की जाती है जहाँ लिंक है, जहाँ आप लिंक बनाते समय आप कहाँ थे।
इसके बजाय, आप उस वास्तविक पथ को संग्रहीत कर सकते हैं जिसे आप लिंक में चाहते हैं:
ln -s "$(pwd)" ~/mylink
अपनी कमांड लाइन में (वर्किंग डायरेक्टरी नाम) का आउटपुट डालने के लिए कमांड प्रतिस्थापन का उपयोग करना pwd। lnपूरा रास्ता देखता है और इसे आपके सिमलिंक में संग्रहीत करता है, जो फिर सही जगह पर इंगित करेगा।
Less कम या ज्यादा।
आपको उपयोग करना चाहिए:
ln -s "$(cd . && pwd)" ~/mylink
या:
ln -s "$(pwd -P)" ~/mylink
वर्तमान कार्यशील निर्देशिका के लिए सही परिणाम प्राप्त करने के लिए। इसे तब बदला जा सकता है जब आप इसमें इस प्रश्न के रूप में काम कर रहे थे ।
$PWD(वह पथ जो वह वहां प्राप्त करता था), बजाय $(pwd -P)(वर्तमान निर्देशिका के लिए विहित पथ)। यदि $PWDअब वर्तमान निर्देशिका की ओर इशारा नहीं किया जाता है, तो यह कहने वाली कोई बात नहीं है कि $(pwd -P)अगले मिनट में भी होगा।
"$PWD"कि वर्तमान मूल्य को ले जाया गया है तो भी पुराना मूल्य है। PWDकेवल तभी सेट करें जब आप cdशेल द्वारा आरंभ या आरंभ करें।
cdकरने की गारंटी नहीं है। $ PWD या pwd का उत्पादन वर्तमान निर्देशिका के लिए एक मार्ग है। आप किसी ऐसी चीज़ से बचने की कोशिश कर रहे हैं जो होने की संभावना नहीं है, लेकिन पहले समाधान में, यह जरूरी प्रभावी नहीं है, और दूसरे में, यह व्यवहार बदल रहा है।
mv बाद करता है ln, तो आप उसी स्थिति में समाप्त हो जाते हैं। दूसरी ओर, अगर उसने किया cd /long/logical/path/to/some/directory, तो आप लिंक /vg0/lv1/user2/app4(विहित पथ) को इंगित नहीं करना चाहते क्योंकि लिंक गलत जगह पर इंगित करेगा जब /long/logical/path/to/some/directoryकहीं और इंगित करेगा ।
"$PWD"POSIX गोले और~0में भी देखेंzsh।