2008-10-08 15 views
10

हर बार जब मैं "at" कमांड का उपयोग करता हूं, तो मुझे यह संदेश मिलता है:"At" कमांड हमेशा मुझे चेतावनी देता है कि आदेश sh के माध्यम से निष्पादित किए जाएंगे?

warning: commands will be executed using /bin/sh 

मुझे चेतावनी देने का क्या प्रयास कर रहा है? सबसे महत्वपूर्ण बात यह है कि मैं चेतावनी कैसे बंद करूं?

उत्तर

12

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

अर्थात

[email protected]$ at 23:00  
warning: commands will be executed using /bin/sh 
at> rm **/*.pyc 
at> <EOT> 
job 1 at 2008-10-08 23:00 

के उपयोग '**' वहाँ पूरी तरह से वैध zsh है, लेकिन नहीं/sbin/श! यदि आप एक अलग खोल का उपयोग करने के लिए उपयोग किया जाता है, तो इन गलतियों को बनाना आसान है, और सही काम करने के लिए याद रखना आपकी ज़िम्मेदारी है।

+0

/बिन/शा बॉर्न शेल है, बैश नहीं। –

+1

हेक, यहां तक ​​कि/bin/bash और/bin/sh अलग-अलग कार्य करते हैं, भले ही/bin/sh को बाँधने के लिए सिम्लिंक किया जाता है। – ephemient

+0

@ जॉन अच्छी तरह से यह आमतौर पर बाश करने के लिए एक सिम्लिंक है ... (उबंटू पर नहीं ... हालांकि हाँ यह मायने रखता है) – Spudd86

2

आप एक स्क्रिप्ट है कि एक निर्दिष्ट पर्यावरण कॉल रन 'में' उस संदेश से बचने के लिए, है चाहते हैं, तो यह ksh, बैश, csh, zsh, पर्ल, आदि हो

अलावा - देखना अधिक जानकारी के लिए 'एट' मैन पेज http://www.rt.com/man/at.1.html पर।

at and batch read commands from standard input or a specified file which are to be executed at a later time, using /bin/sh. 
+2

नहीं कहा जाता है, मेरा मतलब है, मैं चेतावनी संदेश कैसे बंद कर सकता हूं? * – raldi

4

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

अब, अगर आप बस इसे देख नहीं करना चाहते हैं, तो आप [समय] 2>/dev पर उपयोग कर सकते हैं/बातिल यह गुमनामी के लिए रवाना भेजने के लिए, लेकिन, दुर्भाग्य से, पर> संकेतों को मुद्रित कर रहे हैं कुछ कारणों से एसटीडीईआरआर (एक बग, आईएमओ - उन्हें वास्तव में एसटीडीओयूटी में जाना चाहिए), इसलिए वे इससे भी छिपाए जाते हैं। कुछ खोल नलसाजी को काम करना संभव हो सकता है जो चेतावनी खाने के बिना चेतावनी को खत्म कर देगा, लेकिन ए) इस पर मेरा प्रयास ([समय] 2> & 1 | grep -v चेतावनी) काम नहीं करता है और बी) भले ही आप एक संयोजन प्राप्त कर सकें जो काम करता है, यह एलियासिंग के लिए उपयुक्त नहीं होगा (क्योंकि समय अंत में मध्य में होता है), इसलिए आपको इसे हर बार पूर्ण रूप से टाइप करने की आवश्यकता होगी यह या तो पर पर इसे संभालने के लिए एक रैपर स्क्रिप्ट लिखें।

इसलिए, जब तक कि यह वास्तविक समस्याओं का कारण नहीं बनता है, तो मैं कहूंगा कि आप शायद बाकी की तरह चेतावनी को अनदेखा कर सकते हैं।

+1

आह, अच्छा जोड़ा एसटीडीईआरआर के बारे में और STDOUT नहीं। मैं हमेशा सोच रहा था कि सामान्य रीडायरेक्ट क्यों काम नहीं करता था। एसटीडीईआरआर को लिखने का दुष्प्रभाव यह है कि यह व्यवस्थापक को एक ईमेल भेजता है (मुझे अपने स्थानीय सिस्टम पर होने के नाते) जैसा कि आप कहते हैं, हानिकारक प्रभाव नहीं है, लेकिन हाँ यह परेशान है ;-) – Michel

3

यह आपको याद दिलाता है कि आदेश मानक बोर्न शैल द्वारा चलाए जाएंगे, जिसका अर्थ है कि आपके कमांड-सिंटैक्स को उस खोल के साथ संगत होना चाहिए। ("मज़ा" तथ्य: मैं बस देखा कि यह चेतावनी दी है कि अपने वर्तमान खोल आप भी हालांकि/bin/sh है एक बग होना चाहिए।।)

एक 'आसान हैक' दूर करने के लिए संदेश केवल पहले दूर करने के लिए है आउटपुट की रेखा। यह at आदेश को पुनर्परिभाषित द्वारा एक सुविधाजनक तरीके से किया जा सकता है:

at() { /usr/bin/at [email protected] 2>&1 | tail -n +2; } 

आप इसे फ़ाइल में आपका अन्य खोल उपनाम (~/.bashrc, ~/.zshrc या अपने खोल के लिए बराबर) शामिल करने के लिए जोड़ सकते हैं।

नोट: उपरोक्त 'हैक' में tail कमांड इनलाइन कमांड लिखते समय at> -prefix को भी हटा देगा। शायद एक सौदा-ब्रेकर नहीं, लेकिन कुछ पता होना चाहिए।