जवाबों:
एक सिम्लिंक वास्तव में आपके द्वारा दिए गए पथ को स्टोर करता है, एक स्ट्रिंग के रूप में। इसका मतलब है कि आपके लिंक ~/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
।