कमांड के एक भाग के रूप में एक अंतरिक्ष के साथ बैश उर्फ


11

मैं एक बैश उपनाम बनाने की कोशिश कर रहा हूं, जहां खुद उर्फ ​​का एक स्थान है।

विचार यह है कि उर्फ ​​(यानी con) के लिए खड़ा है sudo openvpn --config /path/to/my/openvpn/configs/। जिसका परिणाम एक पठनीय कमांड में होता है, जब conउपनाम का उपयोग किया जाता है।

अर्थात: `con uk.conf` == `sudo openvpn --config /path/to/my/openvpn/configs/uk.conf`

मैं समझता हूँ कि मैं इस तरह उर्फ की घोषणा नहीं कर सकते हैं: con ="sudo openvpn --config /path/to/my/openvpn/configs/"। क्या बाश कार्य इस परिदृश्य में काम करेंगे? मैंने इसके बारे में कभी नहीं सुना है, लेकिन जब इस मामूली मुद्दे के समाधान पर शोध किया जाता है।

जवाबों:


12

हां, आपको एक फ़ंक्शन का उपयोग करने की आवश्यकता होगी। यदि आप एक पैरामीटर जोड़ना चाहते हैं, तो एक उपनाम काम करेगा, एलियास को दिए गए किसी भी तर्क को अलियास किए गए कार्यक्रम के लिए तर्क के रूप में पारित किया जाता है, लेकिन अलग-अलग मापदंडों के रूप में , बस वहां क्या है, इसके लिए संलग्न नहीं है। चित्रित करना:

$ alias foo='echo bar'
$ foo
bar
$ foo baz
bar baz

जैसा कि आप देख सकते हैं, क्या प्रतिध्वनित हुआ था bar bazऔर क्या नहीं barbaz। चूंकि आप मौजूदा पैरामीटर को पास करने वाले मान को बदलना चाहते हैं, इसलिए आपको कुछ इस तरह की आवश्यकता होगी:

function com(){ sudo openvpn --config /path/to/my/openvpn/configs/"$@"; }

अपने ऊपर की रेखा जोड़ें ~/.bashrcऔर आप जाने के लिए तैयार हैं।


4
आप "$@"इसके बजाय उपयोग कर सकते हैं "$1"ताकि बाद के तर्कों को भी पारित कर दिया जाए। (सामान्य टिप्पणी, संभवतः यहां विशिष्ट मामले के लिए अप्रासंगिक)
टॉबी स्पाइट

@TobySpeight D'oh! मैंने उसके बारे में सोचा होता। धन्यवाद, संपादित
terdon

1
@TobySpeight सिर्फ स्पष्टीकरण के लिए, क्या इसका मतलब यह है com uk.conf -something elseकि अनुवाद होगा sudo openvpn --config /path/to/my/openvpn/configs/uk.conf -something else?
TMH 15

4
@ टोमार्ट हाँ। $@दिए गए सभी पैरामीटर शामिल हैं। देखें कि $ * और $ @ के बीच क्या अंतर है?
terdon
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.