जवाबों:
( sleep 300 ; echo "80" > /sys/class/leds/blue/brightness ) &
इस तरह से आपकी स्क्रिप्ट जारी रहती है, या आप तुरंत नियंत्रण बहाल करते हैं, जबकि स्क्रिप्ट का एक नया बैकग्राउंड कार्य शुरू होता है, जिसमें दो कमांड होते हैं: नींद, और गूंज।
सामान्य त्रुटि sleep
या तो देने की कोशिश कर रही है echo
या दोनों &
जो कि इरादा के अनुसार काम नहीं करेगी। आदेशों की एक श्रृंखला शुरू करना, ()
हालांकि उन्हें एक अलग शेल प्रक्रिया में प्रायोजित करता है, जिसे आप बाद में पूरी पृष्ठभूमि के साथ भेज सकते हैं &
।
उस बुद्धि के लिए, जहाँ मैंने इसे सक्रिय रूप से उपयोगी पाया। एक एम्बेडेड डिवाइस में मैं विकसित करता हूं वहां मुख्य अनुप्रयोग है जो एक वॉचडॉग के साथ काम करता है। यदि यह स्टार्टअप के तुरंत बाद वॉचडॉग रीसेट को ट्रिगर करने वाले तरीके से विफल हो जाता है, तो यह ओएस स्टार्ट और रीसेट के बीच की अवधि के रूप में दूरस्थ रूप से ठीक करना मुश्किल है, ऐप स्टार्टअप को बाधित करने और ब्लॉक करने के लिए पर्याप्त नहीं है। इसलिए मुझे सिस्टम को इतनी तेजी से फिर से शुरू करने का निर्धारण करने और इसे शुरू करने में देरी करने का एक तरीका चाहिए, ताकि इसे मैन्युअल रूप से ठीक करने के लिए खुद को समय दिया जा सके।
[ -f /tmp/startdelay ] && sleep 30
touch /tmp/startdelay
( sleep 30 ; rm /tmp/startdelay ) &
[ -f /tmp/noautostart ] && exit 0
start_app
अगर मैं लॉग इन करता हूँ और touch /tmp/noautostart
मुख्य ऐप चालू करता हूँ तो शुरू नहीं होगा अगर वॉचडॉग किक करता है, rm /tmp/startdelay
तो प्रदर्शन नहीं किया जाएगा और अगली बार जब सिस्टम शुरू होगा, तो मुझे इसे रोकने के लिए अतिरिक्त 30s देने होंगे। अन्यथा बिना किसी देरी के पुनः आरंभ त्वरित होगा।
&
की पृष्ठभूमि के साथ नींद शामिल थी; "आपको नींद की पृष्ठभूमि के साथ-साथ शुरुआत की पहली पंक्ति में थी " । यदि आप मुझ पर विश्वास नहीं करते हैं, तो संपादन इतिहास को देखें। और मेरा उत्तर आपके से 5 मिनट बड़ा है: P
()
समूह की पृष्ठभूमि नहीं बनाते हैं , तो मूल शेल तब तक विराम देगा जब तक कि एक खत्म नहीं हो जाता।)
at
कमांड का उपयोग करें
echo "echo \"80\" > /sys/class/leds/blue/brightness" | at now + 5 min
वह पृष्ठभूमि में चलेगा
echo
पूरी तरह से एक हेरेडोक या हेस्ट्रिंग का उपयोग करके।
at
एक मानक POSIX कमांड है। क्या यूनिक्स जैसी प्रणाली डिफ़ॉल्ट रूप से उपलब्ध नहीं है?
यदि आप 5 मिनट में कुछ चलाना चाहते हैं, लेकिन आपके कार्यक्रम को जारी रखने (या समाप्त) करने के लिए, तो आपको नींद को पृष्ठभूमि में रखने की आवश्यकता है:
#!/bin/bash
runWithDelay () {
sleep $1;
shift;
"${@}";
}
runWithDelay 3 echo world &
echo hello
यह प्रिंट करेगा hello
और फिर 3 सेकंड बाद (मुख्य कार्यक्रम से बाहर निकलने के बाद) प्रिंट करेगा world
।
&
पृष्ठभूमि में फ़ंक्शन निष्पादन को कांटा करने के लिए महत्वपूर्ण हिस्सा है ।
runWithDelay () { sleep $1; "${@:2}"; }
इसके बजाय सुझाव दूं?
doWhateverWithDelay 3 &
आपके दूसरे उदाहरण में पढ़ना चाहिए ।
$@
है कि आप इसे उद्धृत कर सकते हैं और उद्धृत शब्दों की सूची के रूप में विस्तारित किया जाएगा। तो बेहतर है इसे बनाएं "$@"
(या "${@}"
यदि आपको ब्रेसिज़ पसंद हैं)। देखें pastebin.com/MU7hbB2C
-n
) के साथ आर्ग्स का उपयोग किया जाए , लेकिन जाहिर है कि थोड़ा सा अनुभवहीन था।