बैश में, कैसे एक उपनाम में अतिरिक्त तर्क शामिल नहीं हैं?


10

मैं कुछ ऐसा करने की कोशिश कर रहा हूं

alias ftp='echo do not use ftp. Use sftp instead.'

बस इतना है कि ftpगलती से इस्तेमाल नहीं किया जाएगा। लेकिन मैंने उस पर ध्यान दिया

ftp abcd.com

कमांड को प्रतिध्वनित करने का कारण होगा

do not use ftp. Use sftp instead. abcd.com

क्योंकि के abcd.comलिए एक तर्क लिया जाता है echo

क्या बैश abcd.comको प्रतिस्थापन में नहीं जोड़ने का एक तरीका है , या echoइसे अतिरिक्त तर्क के रूप में नहीं लिया जाए? (प्रत्येक दृष्टिकोण के लिए एक समाधान है?)

मुझे लगा कि मैं इसे बना सकता हूं

alias ftp='sftp'

लेकिन मैं सिर्फ कमांड को एक साथ रोकना चाहता हूं ताकि खुद को उपयोग न करने के लिए याद दिलाया जा सके ftp


3
अधिकतर आप ftpअलग-अलग तरीके से मना कर सकते हैं , लेकिन अगर आप ऐसा करना चाहते हैं - तो printfइसके बजाय का उपयोग करें echo:printf "Do not use ftp. Use sftp instead.\n\c"
कोस्टा

जोड़े echoको sftpउर्फ? यानी alias ftp='echo "Do not use ftp"; sftp'। आपको अनुस्मारक प्राप्त होगा, जबकि उपयोग करने के लिए मजबूर किया जा रहा है sftp
जोश जॉली

@JoshJolly मैं "के माध्यम से" पाल करने के लिए सभी को एक साथ रोकने के लिए आदेश बनाना चाहता था, ताकि मुझे लगातार उपयोग न करने की याद ftp
दिलाई जाएगी

1
ध्यान दें कि उपनाम बेहद सरल हैं; वे साधारण स्ट्रिंग प्रतिस्थापन से अधिक कुछ नहीं हैं (अतिरिक्त सीमाओं के साथ कि (1) प्रतिस्थापन केवल कमांड स्ट्रिंग की शुरुआत में होता है, और (2) यह गैर-पुनरावर्ती है)। वहाँ कोई तरीका नहीं है "कॉन्फ़िगर" करने के लिए कैसे एक उपनाम ही उपनाम की परिभाषा से परे काम करता है।
काइल स्ट्रैंड

अरे ... खेद, उपनाम हैं पुनरावर्ती। निश्चित नहीं कि मैं क्या सोच रहा था।
काइल स्ट्रैंड

जवाबों:


18

जब आप एक उपनाम को परिभाषित करते हैं, तो आपके द्वारा निर्धारित कमांड को आपके द्वारा लिखे गए के बजाय चलाया जाता है। इसका मतलब है कि जब आप दौड़ते हैं ftp abc.com, तो वास्तव में क्या निष्पादित होता है

echo do not use ftp. Use sftp instead abc.com

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

ftp(){ echo 'do not use ftp. Use sftp instead'; }

वैकल्पिक रूप से, आप printfकोस्टास द्वारा सुझाए गए अनुसार उपयोग कर सकते हैं :

alias ftp="printf 'do not use ftp. Use sftp instead\n'"


9

#उर्फ स्ट्रिंग के अंत में एक स्थान और टिप्पणी वर्ण डालें:

alias ftp='echo do not use ftp. Use sftp instead. #'
ftp abcd.com
do not use ftp. Use sftp instead.

यह मापदंडों को एक टिप्पणी के रूप में माना जाएगा। बस पहले एक जगह जोड़ने के लिए मत भूलना #अन्यथा यह उर्फ ​​विस्तार के बाद एक अलग टोकन के रूप में व्याख्या नहीं की जाएगी।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.