2010-10-05 10 views
7

में एक बैश स्क्रिप्ट में एक प्रतीकात्मक लिंक बनाना मेरी बैश स्क्रिप्ट फ़ोल्डर्स (जो मौजूद है और सबकुछ) के साथ दो तर्क प्राप्त कर रही है।एक अलग फ़ोल्डर

पहले एक मैं करने के लिए एक लिंक बनाना चाहते हैं अंदर

दूसरा

मान लीजिए मैं है फ़ोल्डरों/घर/मैट/एक और/घर/मैट/b, मैं फोन इस तरह स्क्रिप्ट:

/home/matt # ./my_script ./a ./b 

मैं एक प्रतीकात्मक कड़ी देखना चाहते हैं अंदर है कि बताते हैं एक ख को

और निश्चित रूप से, बस कर

ln -s $2 $1/link 

स्क्रिप्ट में काम नहीं करता है ... (यह एक लिंक बना देगा जो एक ./b के अंदर दिखता है)

यह एक बहुत ही सरल उदाहरण है, मैं एक ऐसी स्क्रिप्ट की तलाश में हूं जो पर्याप्त सामान्य होगा अलग तर्क (निरपेक्ष या सापेक्ष पथ ... आदि ...) ले

उत्तर

2

इस आजमाएँ:

ln -s "$(readlink -e "$2")" "$1/link" 

अगर आप readlink है।

या शायद larsmans द्वारा उत्तर पर इस बदलाव:

cd "$2" 
dir=$(pwd) 
cd - 
ln -s "$dir" "$1/link" 
+1

रीडलिंक के साथ यह अच्छी तरह से काम करता है (यह 'ls' के बजाय 'ln' है) – Matthieu

+0

@ मैथ्यूयू: टाइपो निश्चित, धन्यवाद। –

1
#!/bin/sh 
cd $2 
ln -s "`pwd`" $1/link 
+0

यह विफल रहता है, $ 1 $ 2 ... अंदर/लिंक की तलाश में, मैं ज्यादातर तर्कों के लिए केवल सापेक्ष पथ का उपयोग करके कोशिश कर रहा हूं ... – Matthieu

+0

क्या आपके पास रिक्त स्थान के साथ पथनाम हैं? यह समझा सकता है कि यह उचित उद्धरण के बिना क्यों काम नहीं करता है (जैसा कि डेनिस विलियमसन द्वारा उदाहरण दिया गया है)। –

1

यहाँ एक और प्यारा एक लाइनर है: अभी

ln -s `cd \`dirname $2\`; pwd`/`basename $2` $1/link 
+0

मुझे यह पसंद है ... – Matthieu

+2

आप बैकटिक्स के बजाय '$()' का उपयोग कर अजीब भागने से बच सकते हैं: 'ln -s" $ (cd "$ (dirname" $ ​​2 ")"; pwd)/$ (बेसनाम " $ 2 ")" "$ 1/लिंक" ' –

संबंधित मुद्दे