एक बैश स्क्रिप्ट के लिए एक उपनाम बनाना


10

इसलिए मैंने प्रयोग करने की कोशिश की है और एक aliasमें बनाया है .bashrc। हालाँकि, जब मैं कमांड प्राप्त करता हूँ,

[rkahil@netmon3 ~]$ menu
-bash: menu: command not found

यहाँ मैं .bashrcफ़ाइल में क्या है :

# Source global definitions

if [ -f /etc/bashrc ]; then
        . /etc/bashrc
fi

# User specific aliases and functions
alias menu='./menuScript.sh'
alias vi='vim'

मजेदार बात यह है कि जब मैंने उर्फ ​​बनाया vi, तो यह काम किया। लेकिन मेनू नहीं है। मैंने UnixStackExchange पर पिछली पोस्ट देखी हैं और अन्य पोस्ट का अनुसरण करने का प्रयास किया है, लेकिन कोई फायदा नहीं हुआ। क्या किसी और के पास कोई सुझाव है?


1
क्या आपने उपनाम मेनू = 'bash ./menuScript.sh' के साथ प्रयास किया है? (मैं एक linux मशीन में नहीं हूँ, यह परीक्षण नहीं कर सकता)
Con7e

आप 'मेनू' कहाँ से चला रहे हैं? यदि यह 'menuScript.sh' जैसी ही डायरेक्टरी नहीं है तो यह 'कमांड नहीं मिला' के बारे में शिकायत करेगा। शायद आपको एक निरपेक्ष मार्ग का उपयोग करना चाहिए?
garethTheRed

1
@garethTheRed यह कह सकते हैं कि./menuScript.sh: command not found
माइकल Mrozek

@MichaelMrozek - उचित एक। मैंने अभी जाँच की है और इसने कहा No such file or directory, जो अभी भी ओपी की त्रुटि के समान नहीं है। बिंदु अभी भी हालांकि खड़ा है - यह एक निरपेक्ष पथ के साथ सबसे अच्छा होगा जब तक कि उपनाम हमेशा केवल उस निर्देशिका से उपयोग नहीं किया जाएगा जहां menuScript.shरहता है।
19th में 19th

1
@ryekayo किया :)
Con7e

जवाबों:


9

आप के साथ प्रयास करना चाहिए alias menu='bash ./menuScript.sh'। मैं वर्तमान में लिनक्स मशीन पर नहीं हूं, इसलिए मैं खुद इसका परीक्षण नहीं कर सकता, लेकिन यह काम करना चाहिए। जब आप उपनाम कहते हैं, तो यह नहीं पता है कि पथ के साथ क्या करना है, इसलिए आपको bashशुरुआत में शामिल करना चाहिए ।

और टर्मिनल को रीसेट करने से परिवर्तन करने के बाद मदद मिलती है।


मुझे समझ में नहीं आता है कि पहला पैराग्राफ कितना महत्वपूर्ण है - जब तक 'निष्पादन योग्य होने के लिए एड' menuScript.shनहीं किया गया है chmod, यह उस स्थिति में है जब त्रुटि संदेश "अनुमति अस्वीकृत" हो गया होगा। मुझे संदेह है कि .bashrcफ़ाइल का फिर से जवाब देने के लिए जवाब देना है। ……………… पीएस शेल को पता है कि जिस तरह से उपयोगकर्ता टाइप करता है, उसी तरह से पथ के साथ क्या करना है ./menuScript.sh- फ़ाइल को निष्पादित करने का प्रयास करके।
स्कॉट

7

जब तुम करोगे

alias menu='./menuScript.sh'

आप ऐसा उपनाम बनाते हैं जो "उस फ़ाइल" को कहता है, लेकिन यह नहीं कहता कि वास्तव में इसके साथ क्या करना है।

हालांकि, अगर आप करते हैं

alias menu='source ./menuScript.sh'

या

alias menu='. ./menuScript.sh'

आप कह रहे हैं कि फ़ाइल चलाएं


6

क्या आपको बदलाव करने के बाद अपनी ~ / .bashrc फाइल को सोर्स करना याद है? क्योंकि आपके कंप्यूटर को पुनरारंभ करने या बस फ़ाइल को सोर्स करने के बाद आपके .bashrc फ़ाइल में परिवर्तन प्रभावी हो जाते हैं।


2
इस प्रकार की पोस्ट दिखाई देती है, हालांकि यह एक टिप्पणी के लिए अधिक उपयुक्त होगी।
हेलोजोस्ट जूल

2
@HalosGhost आप कैसे आंकते हैं? यह पहली बात मैं भी के बारे में सोच होता है यह कारण होगा वास्तव में इस
माइकल Mrozek

@MichaelMrozek, मैं इसे केवल इसलिए सुझाता हूं क्योंकि यह मुझे लगता है कि उत्तर पोस्ट को एक निश्चित समाधान की पेशकश करनी चाहिए, उदाहरण के लिए, "आप अपने स्रोत को भूल गए .bashrc, निम्नलिखित करें ..."। दूसरी ओर, प्रश्नों को स्पष्ट करते हुए (उदाहरण के लिए, "क्या आप भूल गए ...?") टिप्पणियों के लिए अधिक उपयुक्त लगते हैं। इस पोस्ट को एक उत्तर के लिए अधिक अनुकूल बनाने के लिए यह अधिक रीफ़्रैशिंग नहीं करेगा।
हेलोजोस्ट जूल

अपने कंप्यूटर को रीस्टार्ट करते समय यह ट्रिक करेगा, आपको केवल टैटी या अपने सत्र (यदि लॉगिन मैनेजर का उपयोग करके) से लॉग आउट करना है। यदि आप एक ग्राफिकल वातावरण में लॉग इन हैं, और आप source ~/.bashrcया नहीं करना चाहते हैं . ~/.bashrc, तो आप बस एक और खोल भी खोल सकते हैं। यह इतना सरल है। कोई रिबूटिंग की आवश्यकता नहीं है।
डायलान

0

इसके साथ काम करने vimका कारण यह है कि यह एक ऐसा कार्यक्रम है जो पहले से ही बिना किसी प्रत्यक्ष मार्ग के कॉल करने योग्य है। आपको स्पष्ट रूप से यह कहने की ज़रूरत नहीं है कि "मैं चाहता हूं कि इसे एक कार्यक्रम के रूप में निष्पादित किया जाए" क्योंकि vimपहले से ही एक है। यह ओएस में हार्ड-कोडेड है कि जब यह कमांड प्राप्त करता है vim, तो फ़ाइल पर जाएं /usr/bin/viया जहां भी वास्तविक कार्यक्रम है , निष्पादित करें ।


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

@roaima मेरा क्या मतलब था कि कॉलिंग विम एक कस्टम प्रोग्राम को कॉल करने की तुलना में थोड़ा अलग है। मैं देख रहा हूं कि आप पर क्या हो रहा है, हालांकि, और सहमत हैं
नथानेल मॉर्गन

मेरे पास एक स्क्रिप्ट है, जो ifviमेरे $HOME/bin(जो मेरे में होती है $PATH) में रहती है। मैं इसे ठीक उसी तरह उपयोग करता हूं जिस तरह से मैं सिस्टम-स्थापित बाइनरी चला सकता हूं। यह वास्तव में कोई फर्क नहीं पड़ता कि यह एक कस्टम प्रोग्राम है।
रोज़ा

0

उर्फ के साथ दो मुद्दे हैं

alias menu='./menuScript.sh'
  1. जब आप उपनाम भेजते हैं, तो आपको एक विशेष निर्देशिका में होना चाहिए। यदि आप उस निर्देशिका में हैं जहाँ menuScript.shमौजूद नहीं है, तो उपनाम निष्पादित करने में विफल हो जाएगा।

    यह बेहतर होगा यदि आप menuScript.shउपनाम को परिभाषित करते समय स्क्रिप्ट को पूर्ण निरपेक्ष पथ निर्दिष्ट करते हैं , जैसे

    alias menu="$HOME/local/bin/menuScript.sh"

    या इसी के समान।

  2. जैसा कि अन्य लोग पहले ही कह चुके हैं, उर्फ ​​असफल होने का एक और कारण यह है कि स्क्रिप्ट निष्पादन योग्य नहीं है, या जिसके पास अमान्य- #!पंक्ति है। सुनिश्चित करें कि स्क्रिप्ट के साथ निष्पादन योग्य है

    chmod +x menuScript.sh

    और स्क्रिप्ट में पहली पंक्ति है

    #!/bin/bash

    या bashआपके सिस्टम पर जो भी रास्ता है (या जो भी स्क्रिप्ट के लिए लिखा गया है)।

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