bash - वर्तमान कार्य निर्देशिका के बजाय फ़ाइल स्थान के आधार पर सापेक्ष पथ



shell (2)

इस प्रश्न का पहले से ही यहाँ एक उत्तर है:

दिया हुआ:

some.txt
dir
 |-cat.sh

सामग्री के साथ cat.sh के साथ:

cat ../some.txt

फिर चल रहा है। dir अंदर ./cat.sh रनिंग करते समय ठीक काम करता है। / dir ./dir/cat.sh उसी स्तर पर, जैसा कि dir नहीं करता। मुझे उम्मीद है कि यह अलग-अलग कार्यशील निर्देशिकाओं के कारण होगा। वहाँ एक आसान रास्ता बनाने के लिए था ../some.txt के स्थान के cat.sh ?

https://ffff65535.com


आप जो करना चाहते हैं, उसे स्क्रिप्ट का संपूर्ण पथ मिल सकता है ( ${BASH_SOURCE[0]} माध्यम से उपलब्ध है) और फिर इसका उपयोग मूल निर्देशिका को प्राप्त करने के लिए करें और इसे स्क्रिप्ट की शुरुआत में cd लिए करें।

#!/bin/bash
parent_path=$( cd "$(dirname "${BASH_SOURCE[0]}")" ; pwd -P )

cd "$parent_path"
cat ../some.text

इससे आपकी शेल स्क्रिप्ट काम से स्वतंत्र हो जाएगी जहां से आप इसे लागू करते हैं। हर बार जब आप इसे चलाते हैं, तो यह ऐसा होगा जैसे आप दौड़ रहे ./cat.sh

ध्यान दें कि यह स्क्रिप्ट केवल तभी काम करती है जब आप स्क्रिप्ट को सीधे लागू कर रहे हों (यानी सिम्क्लिन के माध्यम से नहीं), अन्यथा स्क्रिप्ट की वर्तमान स्थिति का पता लगाना थोड़ा और मुश्किल हो जाता है)


बस एक लाइन ओके होगी।

cat "`dirname $0`"/../some.txt





shell