readlink
निरपेक्ष पथ प्राप्त करने के लिए बैश मानक है। यदि पथ या पथ मौजूद नहीं है (तो ऐसा करने के लिए झंडे दिए गए हैं) यह खाली तारों को वापस करने का लाभ है।
किसी निर्देशिका के पूर्ण पथ को प्राप्त करने के लिए, जिसका अस्तित्व है या नहीं हो सकता है, लेकिन उसके माता-पिता कौन हैं, इसका उपयोग करें:
abspath=$(readlink -f $path)
सभी माता-पिता के साथ एक निर्देशिका के लिए पूर्ण पथ प्राप्त करने के लिए:
abspath=$(readlink -e $path)
दिए गए पथ को कैनोनिज़लाइज़ करने के लिए और अगर वे मौजूद हैं, तो सहानुभूति का पालन करें, लेकिन अन्यथा लापता निर्देशिकाओं को अनदेखा करें और पथ को वापस लौटा दें:
abspath=$(readlink -m $path)
केवल नकारात्मक पक्ष यह है कि रीडिंक लिंक का पालन करेगा। यदि आप लिंक का पालन नहीं करना चाहते हैं, तो आप इस वैकल्पिक सम्मेलन का उपयोग कर सकते हैं:
abspath=$(cd ${path%/*} && echo $PWD/${path##*/})
यह $ पथ के निर्देशिका भाग को chdir करेगा और $ पथ के फ़ाइल भाग के साथ वर्तमान निर्देशिका मुद्रित करेगा। यदि यह chdir में विफल रहता है, तो आपको खाली स्ट्रिंग और stderr पर एक त्रुटि मिलती है।
/foo/bar
या यहाँ तक कि/foo
वास्तव में मौजूद हैं, या आप केवल पथ नाम नियमों के अनुसार स्ट्रिंग परिवर्तन पहलू में रुचि रखते हैं?