एक कमांड के विफल होने के बाद चलने वाले कमांड (फ़ंक्शन) का क्या नाम है?


-1

कमांड चलाते समय, यदि कमांड मौजूद नहीं है, तो कमांड की विफलता के बारे में कुछ जानकारी प्रदर्शित की जाती है।

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

जब भी कमांड विफल रहता है $?मान होगा 127। मुझे इस असफल घटना को पकड़ना है और वहां अपनी आज्ञाओं को चलाना है।


2
चलाने के लिए scriptकरता है, तो commandविफल रहता है, का उपयोग करें: command || script
1710 में जॉन 1024

क्या हमें क्रिस्टल बॉल में देखना चाहिए और देखना चाहिए कि आपकी स्क्रिप्ट क्या है? हम एक स्क्रिप्ट लेखन सेवा नहीं हैं। कृपया संपादित करें और अपनी स्क्रिप्ट को प्रश्न में जोड़ें। यदि आपके पास कोई स्क्रिप्ट नहीं है, तो कोशिश करें और एक लिखें और फिर हम इसे ठीक करने में आपकी मदद कर सकते हैं।
DavidPostill


1
(१) यह कोई पत्राचार नहीं है। यदि हमने आपकी समस्या को हल करने में कुछ प्रगति करने में आपकी मदद की है, तो अपने प्रश्न को दूर न करें और इसे अनुवर्ती के रूप में फिर से लिखें। एक सीमित सीमा तक, आप अपने प्रश्न को जोड़ सकते हैं , इसे परिष्कृत कर सकते हैं (बजाय इसे बदलने के)। मैंने आपके लिए यह करने में पहली कटौती की है। … (Cont'd)
G-Man

2
(Cont'd)… (2) दुर्भाग्य से, आप इसे स्पष्ट रूप से समझाने के करीब नहीं आए हैं। स्पष्ट रूप से आपके प्रश्न के पहले संस्करण को समझने से पहले कोई नहीं। (मैं इस तथ्य से अनुमान लगा रहा हूं कि आप इसके साथ काम करने की कोशिश कर रहे हैं command_not_found_handleकि मैं कम से कम इसे सही ढंग से व्याख्या करने के करीब आया।) अब तक, कोई भी यह नहीं समझता है कि अब आप क्या कह रहे हैं। मैंने आपके प्रश्न में उन स्थानों को छोड़ दिया है जो गायब है जानकारी को उजागर करता है। यदि आप उन्हें भर सकते हैं, तो आपको कुछ और मदद मिल सकती है। कृपया टिप्पणियों में प्रतिक्रिया न दें; इसे स्पष्ट और अधिक पूर्ण बनाने के लिए अपने प्रश्न को संपादित करें।
जी-मैन

जवाबों:


3

मेरे पास यह टुकड़ा है /etc/bash.bashrc(Ubuntu 14.04.4 LTS):

# if the command-not-found package is installed, use it
if [ -x /usr/lib/command-not-found -o -x /usr/share/command-not-found/command-not-found ]; then
    function command_not_found_handle {
            # check because c-n-f could've been removed in the meantime
                if [ -x /usr/lib/command-not-found ]; then
           /usr/lib/command-not-found -- "$1"
                   return $?
                elif [ -x /usr/share/command-not-found/command-not-found ];     then
           /usr/share/command-not-found/command-not-found -- "$1"
                   return $?
        else
           printf "%s: command not found\n" "$1" >&2
           return 127
        fi
    }
fi

ऐसा लगता है कि आपको command_not_found_handleफ़ंक्शन को अधिलेखित करना चाहिए । मुझे नहीं पता कि इसके लिए पैकेज command-not-foundकी आवश्यकता है या नहीं; मुझे लगता है कि नहीं, लेकिन मैं गलत हो सकता है।

उदाहरण:

function command_not_found_handle { echo BOOM! ; }

नतीजा:

$ foo12345
BOOM!
$ echo "echo is valid command"
echo is valid command
$ agrgokdnlkdgnoajgldfnsdalf grhofhadljh
BOOM!
$ cat /etc/issue
Ubuntu 14.04.4 LTS \n \l

$ catt /etc/issue
BOOM!

वापस करने के लिए (जल्दी और गंदे):

# Assuming you haven't modified /etc/bash.bashrc
. /etc/bash.bashrc
# Quick and dirty, because if your ~/.bashrc or ~/.bash_profile //
# overwrites some settings from /etc/bash.bashrc //
# you need to source them again.
# Things may get complicated, I won't cover all the ifs here.
# Logout and login again for the clean start.

/etc/bash.bashrcसभी उपयोगकर्ताओं के लिए "कमांड नहीं मिला" व्यवहार को बदलने के लिए संशोधित करें । केवल अपने लिए काम करने के लिए अपने command_not_found_handleको परिभाषित करें ~/.bashrc। या अपने हैक को सक्षम और अक्षम करने के लिए उचित फ़ंक्शन परिभाषाओं के साथ दो फाइलें लिखें। महत्वपूर्ण: फ़ाइलों को निष्पादित न करें, उन्हें इस तरह से स्रोत करें:

. ~/.hack_enable
. ~/.hack_disable

जहां .hack_enableआपके कार्य को परिभाषित किया .hack_disableगया है, मूल एक पर जाता है (मेरे उत्तर के पहले कोडब्लॉक से या आपके मामले में ऐसा ही कुछ सही है)।


अच्छे व्याख्यात्मक उत्तर के लिए बहुत बहुत धन्यवाद, अगर मुझे यह पसंद है कि यह काम कर रहा है, लेकिन मेरे उपनाम भी कमांड के रूप में व्यवहार कर रहे हैं, जो चीजें नहीं मिली हैं। उनका इलाज अलग कैसे हो सकता है?
अंकना

उपनामों को छोड़कर यह बहुत अच्छा काम करता है। क्या आप मेरी मदद कर सकते हैं कि कैसे उपनाम छोड़ें? मैंने इस प्रश्न को संपादित किया है क्योंकि प्रश्न पहले से थोड़ा भ्रमित करने वाला लगता है। त्वरित उत्तर के लिए धन्यवाद
2

-1

निम्नलिखित स्क्रिप्ट आज़माएं:

if command ; then
    echo "Command succeeded"
 else
    echo "Command failed"
fi

इस तरह आप प्रत्येक मामले में जो भी कोड चाहते हैं उसे निष्पादित कर सकते हैं।

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