क्या बैश में कमांड को परिभाषित करना संभव है?


25

उदाहरण के लिए, क्या मैं सेट कर सकता हूं:

gb = cd /media/Dan/evolution

... ताकि हर बार जब मैं मारपीट पर अमल gbकरूं, मैं cdउस विशेष निर्देशिका में जा सकूं ?

मुझे ऑनलाइन कुछ मिला: aliasकमांड। लेकिन ऐसा लगता है कि यह ऊपर काम नहीं कर सकता।

क्या ऐसा करना संभव है? कैसे?


10
alias gb='cd /media/Dan/evolution'
Nyakakin

4
@ फिर, कृपया इस मुद्दे को हल करने पर जवाब स्वीकार करें। यह उस उपयोगकर्ता को धन्यवाद देने का एक संकेत है जिसने इस मुद्दे को हल करने में आपकी मदद की :) :)
रमेश

2
नोट: यह बैश के बारे में है: लिनक्स कर्नेल है। लिनक्स अक्सर गलत तरीके से पूरे ऑपरेटिंग सिस्टम को संदर्भित करने के लिए उपयोग किया जाता है। इससे भ्रम की स्थिति पैदा हो सकती है। उदाहरण के लिए सवाल "क्या मैं लिनक्स के तहत इस तरह के और इस तरह के काम कर सकता हूं?" यदि आप इसे कुछ कंप्यूटर पर कर सकते हैं, तो हाँ। क्योंकि आप किसी भी ऑपरेटिंग सिस्टम को लिनक्स कर्नेल का उपयोग करके पसंद कर सकते हैं। इसलिए हमें यह जानने की जरूरत है कि आप कौन सा उबुनू गन्नू / लिनक्स + शायद एक्स 11 (अगर डेस्कटॉप पर है, यानी बिना डिस्प्ले वाला सर्वर नहीं) का इस्तेमाल कर रहे हैं।
ctrl-alt-delor

@richard अच्छा बिंदु, हालांकि तकनीकी रूप से यह posixशिकायत है, इसलिए नहीं bash

1
@richard दरअसल, यही समस्या है। यह काम करता है क्योंकि लोगों को एंड्रॉइड और इस तरह के स्वादों का मतलब नहीं है, कम या ज्यादा। मैं यह नहीं कह रहा हूं कि यह अच्छी बात है, लेकिन यह वही है जो यह है। जब से मैं आपके linux स्टेटमेंट पर टिप्पणी कर रहा था तब मेरा रेफरल निहित था। मैं सिर्फ अपने आप को स्पष्ट कर रहा था क्योंकि विषय भ्रमित करने वाला शब्द था। (मैं आपकी पिछली टिप्पणी को गलत समझ सकता हूं)
कीपर

जवाबों:


50

बस टाइप करो:

alias gb='cd /media/Dan/evolution'

इस सेटिंग को स्थायी बनाने के लिए (ताकि आप पुनरारंभ होने या किसी अन्य कंसोल को खोलने के बाद चिपक जाए) इस लाइन को फ़ाइल में जोड़ें ~ .bashrc (मान लें कि आप अपने डिफ़ॉल्ट शेल के रूप में बैश का उपयोग करते हैं)


इसे और भी अच्छा बनाने के लिए, आप अपने उपनामों के लिए एक समर्पित उपनाम फ़ाइल बना सकते हैं, ~ / .bash_aliases कह सकते हैं, और इसे अपनी ~ / .bashrc फ़ाइल में इस तरह से कॉल कर सकते हैं: [-e ~ / / .ashashuases] &&। ~ / .bash_aliases इस तरह, आप अन्य सामग्री के साथ ~ / .bashrc फ़ाइल को "प्रदूषित" नहीं करते हैं।
गीर्टवेक

39

अलियासिंग के लिए वैकल्पिक

gb() { cd /media/Dan/evolution; }

यह शेल फ़ंक्शन gb को परिभाषित करता है, जो कोई तर्क नहीं लेता है, और सीडी / मीडिया / दान / विकास करता है। अन्य सुझावों के साथ, इसे ~ / .bashrc में जोड़ा जा सकता है


नुकसान के साथ कि उपनाम कमांड परिभाषित उर्फ ​​दिखाता है, इस तरह के फ़ंक्शन को परिभाषित करने वाले एफएक के परिणामस्वरूप "अप्रत्याशित व्यवहार" हो सकता है। मैं तुझे पूर्णता के लिए वोट दूंगा :)
vfbsilva

7
ज़रुरी नहीं। आप बस टाइप कर सकते हैं: यह घोषित करने के लिए कि क्या करता है -f gb
पॉल कैलाब्रो

11
साथ ही, यह विकल्प अधिक लचीला है कि यह आपको तर्कों को स्वीकार करने के लिए फ़ंक्शन की परिभाषा के भीतर अपने कस्टम तर्क को जोड़ने और आपको जो कुछ भी ज़रूरत है उसे करने की अनुमति देता है। उपनाम केवल तर्क पारित करने और पूर्वनिर्धारित कार्यों को करने की अनुमति देता है ।
पॉल कैलाब्रो

5
@PaCCalabro इससे भी बेहतर, type gbअगर यह एक उपनाम या एक कार्य है।
स्पैरहॉक

POSIXLY: { echo 'true() { : ; }' >./script ; . ./script ; command -V true ; command -V /usr/bin/true ; }- true is a shell function\n/usr/bin/true is /usr/bin/true- \nअक्षर आउटपुट में शाब्दिक नए समाचार थे।
14

11

यह संभव है, और aliasवह कमांड है जिसकी आप तलाश कर रहे हैं। उदाहरण के लिए alias ll="ls -l"बैश में आपको llइसके बजाय टाइप करने देगा ls -l। कृपया ध्यान दें कि उपनाम स्थापित करते समय कोई स्थान उपयोग नहीं किया जाता है। man aliasके रूप में अच्छी तरह से उपयोगी हो सकता है।


-3

वैकल्पिक रूप से, एक सी प्रोग्राम लिखना संभव है जो वांछित कमांड को कॉल करता है और इसे / usr / bin पर सहेजता है।

#include <stdio.h>
#include <string.h>

int main () {
    char command[50]; //notice you can change this to fit your needs
    int return_val;

    strcpy( command, "echo \"cd /media/Dan/evolution\" | bash -i" );
    return_val = system(command); 

   //this is equivalent to entering the command in a new bash, 
   //which will return and exit

    return return_val;
}

इसे संकलित करने के लिए, उस निर्देशिका में जाएँ जहाँ स्रोत सहेजा गया था (बैश में) और निष्पादित करें (आपको sudo की आवश्यकता हो सकती है):

 gcc ./gb.c -o /usr/bin/gb

यहाँ आगे के शोध के बाद , मैंने महसूस किया कि कमांड में system()बने बैश के लिए आप अपनी कमांड को फेंकना नहीं चाहेंगे। इसलिए आपको एक इंटरएक्टिव बैश का एक उदाहरण बनाने की जरूरत है और अपने आदेशों को प्रतिध्वनित करें। यह केवल अत्यधिक जटिल है और शायद बेकार है, जब तक आप नहीं चाहते हैं, चलो कहते हैं, एक शेल स्क्रिप्ट को कॉल करें ( some_scriptइसके बजाय sh ~/radgeRayden/Scripts/some_script)।

सिस्टम के लिए संदर्भ () फ़ंक्शन


2
क्या आपने वास्तव में यह कोशिश की थी? यह काम नहीं करता है।
डेनिस

1
उसी कारण से जो sh -c "cd /media/Dan/evolution"काम नहीं करता है। संकेत: उपखंड
डिजिटल ट्रॉमा

5
cd/ एक तरफ मुद्दों को हटाएं, c प्रोग्राम में शेल कमांड को लपेटने में क्या फायदा है, जब आप आसानी से (या अधिक आसानी से) उस कमांड को शेल स्क्रिप्ट में डाल सकते हैं?
डिजिटल ट्रामा

1
इस पर एक विशेषज्ञ नहीं, लेकिन ऐसा कुछ नहीं होना चाहिए (उम्मीद है, कुछ और उपयोगी) / usr / स्थानीय / बिन में डाल दिया जाए?
जो

2
अगर यह COULD काम करता है तो भी इसे / usr / लोकल / बिन में नहीं जाना चाहिए क्योंकि यह एक उपयोगकर्ता के लिए विशिष्ट है।
जोहान
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.