को एक साथ जोड़ें यह एक शेल स्क्रिप्ट (.sh फ़ाइल) है। मुझे वर्तमान निर्देशिका के आधार पर एक पूर्ण पथ बनाना होगा। मुझे pwd
के बारे में पता है, लेकिन मैं इसे किसी अन्य स्ट्रिंग के साथ कैसे जोड़ूं?वर्तमान निर्देशिका प्राप्त करें और पथ
"$pwd/some/path"
को एक साथ जोड़ें यह एक शेल स्क्रिप्ट (.sh फ़ाइल) है। मुझे वर्तमान निर्देशिका के आधार पर एक पूर्ण पथ बनाना होगा। मुझे pwd
के बारे में पता है, लेकिन मैं इसे किसी अन्य स्ट्रिंग के साथ कैसे जोड़ूं?वर्तमान निर्देशिका प्राप्त करें और पथ
"$pwd/some/path"
आप की तरह चाहते आवाज:: यहाँ मैं क्या कर कोशिश कर रहा हूँ का एक उदाहरण है
path="$(pwd)/some/path"
$(
एक subshell खोलता है (और )
यह बंद कर देता है) जहां सामग्री हैं एक स्क्रिप्ट के रूप में निष्पादित किया गया है ताकि स्ट्रिंग में उस स्थान पर कोई भी आउटपुट लगाया जा सके।
अधिक उपयोगी अक्सर कि चल रहा है स्क्रिप्ट की निर्देशिका हो रही है:
dot="$(cd "$(dirname "$0")"; pwd)"
path="$dot/some/path"
ऐसा इसलिए है क्योंकि यह एक ही पथ पर ले कर कोई बात नहीं तुम कहाँ हो और अधिक उपयोगी है जब आप स्क्रिप्ट चलाने:
> pwd
~
> ./my_project/my_script.sh
~/my_project/some/path
बजाय:
> pwd
~
> ./my_project/my_script.sh
~/some/path
> cd my_project
> pwd
~/my_project
> ./my_script.sh
~/my_project/some/path
अधिक जटिल है, लेकिन आप अगर यह एक सिमलिंक के माध्यम से निष्पादित किया गया है (आम जब उदाहरण के लिए homebrew के माध्यम से स्क्रिप्ट इंस्टॉल) चल रहा वर्तमान स्क्रिप्ट निर्देशिका की जरूरत है तो आप को पार्स और सिमलिंक पालन करने की आवश्यकता:
if [[ "$OSTYPE" == *darwin* ]]; then
READLINK_CMD='greadlink'
else
READLINK_CMD='readlink'
fi
dot="$(cd "$(dirname "$([ -L "$0" ] && $READLINK_CMD -f "$0" || echo "$0")")"; pwd)"
काम करने के लिए इसके लिए अधिक जटिल और अधिक आवश्यकताएं (उदाहरण के लिए एक gnu संगत रीडलिंक स्थापित है) तो मैं इसे उतना उपयोग नहीं करता है। केवल जब मुझे यकीन है कि मुझे इसकी आवश्यकता है, जैसे होमब्री के माध्यम से एक कमांड स्थापित करना।
पर कॉल करने की आवश्यकता नहीं है जबकि '$ (pwd)' काम करता है, यह '$ PWD' का उपयोग करने के लिए सरल (और मामूली रूप से अधिक कुशल) है, जो कि एक है POSIX- अनिवार्य खोल चर। अच्छी टिप फिर से _running scriptss_ निर्देशिका का निर्धारण कर रही है, लेकिन ध्यान दें कि यदि स्क्रिप्ट को _symlink_ के माध्यम से बुलाया गया था तो यह अपेक्षित काम नहीं कर सकता है। दुर्भाग्य से, कोई सीधा समाधान नहीं है जो पोर्टेबल भी है। – mklement0
सच सच है, सिम्लिंक इसे और अधिक जटिल बना सकता है, मैं इसे दिखाने के लिए इसे अपडेट कर दूंगा। –
अद्यतन करने के लिए धन्यवाद। चूंकि 'readlink -f' पूर्ण लक्ष्य पथ की रिपोर्ट करता है, भले ही तर्क _not_ एक symlink है, आप 'dot = $ (dirname -" $ (READLINK_CMD -f - "$ 0") "को सरल बना सकते हैं"। ध्यान दें कि '$ OSTYPE' का उपयोग पोर्टेबल नहीं है (' bash' और 'zsh' हालांकि यह है)। मैंने एक पॉज़िक्स-अनुरूप शेल फ़ंक्शन बनाया है [यहां] (http://stackoverflow.com/a/29835459/45375)। – mklement0
wd=`pwd`
new_path="$wd/some/path"
खोल builtin एक कमांड प्रतिस्थापन में pwd
($(...)
) का उपयोग करना आवश्यक है, क्योंकि सभी POSIX संगत गोले विशेष $PWD
खोल ऐसा वैरिएबल निरपेक्ष पथ के रूप में वर्तमान निर्देशिका में शामिल है परिभाषित करते हैं, एक विकल्प है, लेकिन mandated by POSIX के रूप में नहीं ।
इस प्रकार, का उपयोग कर $PWD
दोनों सरल और से $(pwd)
अधिक कुशल है:
"$PWD/some/path" # alternatively, for visual clarity: "${PWD}/some/path"
हालांकि, अगर आप निर्देशिका पथ में सिमलिंक को हल करना चाहता था, आप pwd
की जरूरत है, के साथ अपने -P
विकल्प:
"$(pwd -P)/some/path"
ध्यान दें कि POSIX mandates that $PWD
contain an absolute pathname with symlinks resolved। प्रैक्टिस में, हालांकि, कोई प्रमुख पॉज़िक्स-जैसे खोल (bash
, dash
, ksh
, zsh
) ऐसा करता है - वे सभी प्रतीकात्मक लिंक घटक बनाए रखते हैं। इस प्रकार, pwd -P
उन्हें हल करने के लिए आवश्यक है।
Michael Allen's helpful answer अंक बाहर है कि यह आम है जहां चालू स्क्रिप्ट स्थित है निर्देशिका में जानना चाहते हैं।
चुनौती स्क्रिप्ट फ़ाइल ही एक सिमलिंक, तो मूल के सच निर्देशिका का निर्धारण हो सकता है गैर तुच्छ, पोर्टेबिलिटी बहुत जरूरी है, खासकर जब है।
This answer (मेरा) एक समाधान दिखाता है।
"dirname $0
" के साथ आप वर्तमान रन विज्ञान तक डायनेमिन पथ प्राप्त कर सकते हैं। उदाहरण के लिए : आपकी फ़ाइल को खोल फ़ोल्डर फ़ाइल नाम में locateted xyz है और xyz फ़ाइल में शामिल करने के लिए एंथोर फ़ाइल abc हैं। तो xyz फ़ाइल में डाल दें LIK:
php "`dirname $0`"/abc.php
आपका खोल क्या है? कुछ गोले '$ PWD' चर बनाए रखते हैं, इसलिए आपको' pwd' –