2012-04-22 11 views
5

$0 शैल स्क्रिप्ट के नाम पर विस्तारित करता है।बैश स्क्रिप्ट का उपयोग करने वाले उपनाम का नाम कैसे प्राप्त करें

$ cat ./sample-script 
#!/bin/bash 
echo $0 
$ chmod 700 ./sample-script 
$ ./sample-script 
./sample-script 

खोल स्क्रिप्ट एक प्रतीकात्मक लिंक के माध्यम से लागू किया जाता है, तो $0 अपने नाम के साथ फैलता है:

$ ln -s ./sample-script symlinked-script 
$ ./symlinked-script 
./symlinked-script 

मैं कैसे एक उपनाम का नाम मिल सकता है? यहां '$ 0' फ़ाइल नाम पर फिर से फैलता है:

$ alias aliased-script=./sample-script 
$ aliased-script 
./sample-script 

उत्तर

2

मुझे लगता है कि आप इसे पहले ही जानते हैं, लेकिन रिकॉर्ड के लिए जवाब है: आपको उपनाम को लागू करने वाले कोड द्वारा सहयोग की आवश्यकता है।

alternate_name() { 
    MY_ALIAS_WAS=alternate_name real_name "[email protected]" 
} 

या, क्या तुम सच में अधिक्रमित उर्फ ​​सिंटैक्स का उपयोग करना चाहते हैं: एक त्वरित, तकनीकी रूप से सही के लिए

alias alternate_name="MY_ALIAS_WAS=alternate_name real_name" 

... और फिर ...

$ cat ~/bin/real_name 
#!/bin/sh 
echo $0, I was $MY_ALIAS_WAS, "[email protected]" 
+0

लेकिन यह अब उपनाम नहीं है। –

+0

हे, सच है। ठीक है, वास्तविक 'उपनाम' का उपयोग करके अपडेट किया गया :-) – DigitalRoss

+0

बहुत बहुत धन्यवाद! आप सही हैं: मैं उम्र के बाद से इस तरह एलियास का उपयोग कर रहा हूं। बस इसके बारे में नहीं सोचा, जब तक कि तुमने मुझे याद दिलाया! :-) – xebeche

2

बैश यह उपलब्ध नहीं करता है। यही कारण है कि मल्टीप्लेक्स कमांड का आह्वान करने के लिए सिमलिंक का उपयोग किया जाता है, न कि उपनाम।

6

उपनाम सुंदर गूंगा कर रहे हैं, the man page के अनुसार

... उपनाम जब एक आदेश पढ़ा जाता है का विस्तार कर रहे हैं, नहीं, जब यह मार डाला है ...

तो बैश मूल रूप से बस के बाद से एक स्ट्रिंग को दूसरी स्ट्रिंग के साथ बदलकर और फिर इसे निष्पादित करने के लिए, कमांड के बारे में जानने का कोई तरीका नहीं है कि उपनाम में क्या विस्तार किया गया था।

+0

+1 लिंक और उद्धरण सहित जवाब। बहुत बहुत धन्यवाद! – xebeche

+0

मैंने इसे [आंतरिक चर के अंतर्गत उन्नत बैश स्क्रिप्टिंग गाइड] (http://www.tldp.org/LDP/abs/html/internalvariables.html) में देखा और वहां कोई संदर्भ नहीं है। इस उत्तर के लिए धन्यवाद। – Patrick

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