Bash यदि कमांड X समय में समाप्त नहीं होता है?


13

मैं कुछ चलाने की कोशिश कर रहा हूँ जैसे:

sudo dhclient $wifi || otherFunction

समस्या यह है कि जब dhclientयह विफल होता है तो यह केवल एक त्रुटि को फेंकने के बजाय लटका देता है।

मैं ऊपर कैसे लिख सकता हूं, इसलिए dhclientइसे मार दिया otherFunctionजाता है और कहा जाता है कि dhclientक्या 60 सेकंड में खत्म नहीं होता है?

जवाबों:


13

आपका टैग यह सब दूर कर देता है:

sudo timeout 60 dhclient $wifi || otherFunction

एक उदाहरण:

sudo timeout 3 sleep 5 || echo finished early

यह लिनक्स पर GNU कोरुटिल्स पैकेज द्वारा प्रदान किए गए टाइमआउट उपयोगिता का उपयोग करता है ।


2
दुर्भाग्य से मैकओएस पर काम नहीं करता है
— अलेक्जेंडर मिल्स

timeoutMacOS के लिए: stackoverflow.com/a/21118126/451480
— Blaise

यदि आप timeoutकमांड को मारने के लिए विशेष रूप से जांच करना चाहते हैं (जैसा कि अन्य कारणों से कमांड के विफल होने का विरोध किया जाता है), बाहर निकलने की स्थिति 124 के लिए जांचें।
— मुरु


2

पोर्ट के साथ timeoutपैक का उपयोग करें :gtimeoutcoreutilsbrew

brew install coreutils
gtimeout --help

यही कारण है कि के साथ काम करेंगे /usr/local/binअपने में PATH। यदि आप timeoutमूल रूप से नाम के रूप में उपयोग करना चाहते हैं , तो /usr/local/opt/coreutils/libexec/gnubinअपने में जोड़ें PATH।

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