2010-10-30 3 views
84

में उर्फ ​​करने के लिए तर्क पासिंग निम्न करने के लिए क्या यह संभव हैबैश

mongodb bin/mongod 

मेरी bash_profile में मैं

alias = "./path/to/mongodb/$1" 

उत्तर

171

एक उपनाम उस स्ट्रिंग में विस्तारित होगा जो इसका प्रतिनिधित्व करता है। ऊर्फ के बाद कुछ भी स्पष्ट विस्तार के रूप में पारित होने या सक्षम होने की आवश्यकता के बिना दिखाई देगा (उदा। $1)।

$ alias foo='/path/to/bar' 
$ foo some args 

$ /path/to/bar some args 

करने के लिए विस्तारित किया जाएगा आप स्पष्ट तर्क का उपयोग करने के, आप के रूप में यदि आप

किया था एक समारोह का उपयोग करने के

$ foo() { /path/to/bar "[email protected]" fixed args; } 
$ foo abc 123 

निष्पादित किया जाएगा की आवश्यकता होगी चाहते हैं

$ /path/to/bar abc 123 fixed args 

एक को परिभाषित करने के लिए उर्फ:

unset -f foo 

(प्रत्येक परिभाषित उर्फ, कीवर्ड, समारोह, builtin या निष्पादन योग्य फ़ाइल के लिए) प्रकार और परिभाषा देखने के लिए::

type -a foo 

unalias foo 

एक समारोह परिभाषित करने के लिए या केवल टाइप करें (उच्चतम प्राथमिकता घटना के लिए):

type -t foo 
+7

बस मेरे .bashrc mkcd() {mkdir "$ @" && cd "$ @" से उदाहरण जोड़ना चाहते हैं; } जहां मैं –

+0

में डीआईआर और सीडीइंग कर रहा हूं, आपको फ़ंक्शन में पास किए गए तर्कों की $ @ = = सूची के बाद से "एबीसी" लाल रंग देना चाहिए। – 10basetom

+3

@ 10basetom: यदि आप मेरे उत्तर में रंगों का जिक्र कर रहे हैं, तो यह सिंटैक्स हाइलाइटर द्वारा स्वचालित रूप से किया जाता है। –

16

आमतौर पर जब मैं बैश में उपनामों को तर्क देना चाहते हैं, मैं उपनाम के संयोजन का उपयोग करता हूं और इस तरह का एक फ़ंक्शन उदाहरण के लिए:

function __t2d {                 
     if [ "$1x" != 'x' ]; then            
      date -d "@$1"              
     fi                  
} 

alias t2d='__t2d'                
+1

हमेशा के लिए झूठा 'if' कथन क्या है? –

+0

तय। यह एक टाइपो था, क्षमा करें। यह वास्तव में $ 1 – leed25d

+16

'[-n" $ 1 "]' ("x" का उपयोग किसी भी आधुनिक खोल के लिए पुरातन और अनावश्यक है) के अस्तित्व की जांच करना था) –

-3

leed25d के उत्तर को सरल बनाने के लिए, उपनाम और फ़ंक्शन के संयोजन का उपयोग करें। उदाहरण के लिए:

function __GetIt { 
    cp ./path/to/stuff/$* . 
} 

alias GetIt='__GetIt' 
14

उपनाम में पैरामीटर का उपयोग करने, मैं इस विधि का उपयोग:

alias myalias='function __myalias() { echo "Hello $*"; unset -f __myalias; }; __myalias' 

अपने एक आत्म विनाशकारी समारोह एक उपनाम में लिपटे, तो यह काफी दोनों दुनिया का सबसे अच्छा है, और आपकी परिभाषाओं में एक अतिरिक्त रेखा नहीं लेता है ... जो मुझे नफरत है, ओह हाँ और यदि आपको उस वापसी मूल्य की आवश्यकता है, तो आपको इसे अनसेट करने से पहले इसे स्टोर करना होगा, और फिर "वापसी" "उस स्वयं विनाशकारी कार्य में कीवर्ड:

alias myalias='function __myalias() { echo "Hello $*"; myresult=$?; unset -f __myalias; return $myresult; }; __myalias' 

तो ..

आप कर सकते थे, तुम वहाँ

alias mongodb='function __mongodb() { ./path/to/mongodb/$1; unset -f __mongodb; }; __mongodb' 
निश्चित रूप से

में कि चर की आवश्यकता है, तो ...

alias mongodb='./path/to/mongodb/' 

वास्तव में मानकों की आवश्यकता के बिना एक ही बात करते हैं, लेकिन जैसा मैंने कहा, यदि आप चाहते थे या किसी कारण से उन्हें जरूरत है, आप का उपयोग करने की आवश्यकता होगी (उदाहरण के लिए, आप $ 2 के बजाय $ 1 की जरूरत) उस तरह एक रैपर। यदि यह एक पंक्ति से बड़ा है तो आप केवल एक समारोह को लिखने पर विचार कर सकते हैं क्योंकि यह एक बड़ी नजर में बन जाएगा क्योंकि यह बड़ा हो गया है। कार्य बहुत अच्छे होते हैं क्योंकि आप कार्य करने वाले सभी लाभ प्राप्त करते हैं (बैश मैनपेज में उपलब्ध कराई गई उपहारों के लिए पूर्णता, जाल, बाध्य आदि देखें)।

मुझे आशा है कि आप वास्तव में आप क्या चाहते हैं कर सकते हैं (जैसा कि बैश के खिलाफ) तुम बाहर में मदद करता है :)

+2

~ $ उर्फ ​​myalias = 'function __myalias() {echo "हैलो $ *"; unset -f __myalias; } __myalias ' ~ $ myalias -bash: अप्रत्याशित टोकन' __myalias ' – JeeBee

+0

के पास वाक्यविन्यास त्रुटि यह भयानक है! आप हर बार समारोह को फिर से परिभाषित कर रहे हैं? (मैं यह जांचने के लिए भी परेशान नहीं हो सकता कि क्या आपके पास वाक्यविन्यास त्रुटियां हैं)। –

+0

ऐसा नहीं है कि उन्हें ऐसा करना है, वैसे ही, यह एक उदाहरण माना जाता था, और हाँ इसे हर बार फिर से परिभाषित किया जाता है, जो इसे एक पंक्ति में रखता है, अन्यथा, यह एक शॉट नहीं होगा ? यह शिकायत करने जैसा है कि "उपनाम" हर बार इसे निर्दिष्ट सामग्री में फैलाता है, यह कैसे अलग है? और इतनी भावनात्मक होने की कोई आवश्यकता नहीं है। – osirisgothra

3

csh में।

alias print 'lpr \!^ -Pps5' 
print memo.txt 

अंकन \!^ का कारण बनता है तर्क इस बिंदु पर आदेश में प्रवेश करे।

! चरित्र \ द्वारा इतिहास इतिहास के रूप में व्याख्या करने से रोकने के लिए पहले से आगे बढ़ता है।

तुम भी पारित कर सकते हैं कई तर्क:

alias print 'lpr \!* -Pps5' 
print part1.ps glossary.ps figure.ps 

(उदाहरण http://unixhelp.ed.ac.uk/shell/alias_csh2.1.html से लिया।)

+0

धन्यवाद! मैं काम पर 'सीएसएच 'का उपयोग करता हूं और यह पहली बार मैंने इसकी सराहना की है! –

5

यह समाधान जो फ़ंक्शन का उपयोग करने से बचने कर सकते हैं:

alias addone='{ num=$(cat -); echo "input: $num"; echo "result:$(($num+1))"; }<<<' 

परीक्षा परिणाम

addone 200 
input: 200 
result:201 
+0

यह मेरे लिए पूरी तरह से काम किया। मैं अपने उपनाम में रंग संख्या (31 से 37 तक) पीएस कमांड पास करना चाहता था। मैंने ऐसा कुछ किया: उर्फ ​​psany = '{PS1 = "\ e [0; $ (बिल्ली -) m> \ e [m";} <<<' उपयोग: psany 32 – zviad