2011-03-11 14 views
17

क्रोंटैब में, क्या आप ऐसा कुछ कर सकते हैं?क्रॉन्टाब में% विशेष कैसा है?

* * * * * echo $(date +%F) >> /path/date.txt 
+1

मेल मुझे यह दिखाएं। /बिन/sh -c "echo $ (दिनांक + /बिन/sh: -c: रेखा 0: अनपेक्षित ईओएफ मिलान के लिए देख रहे हैं ' /bin/sh: -c: पंक्ति 1: वाक्यविन्यास त्रुटि: अप्रत्याशित फ़ाइल – JuanPablo

+0

का अंत यह है कि 'echo'] (http://www.iki.fi/era/unix/award.html#echo) का बेकार उपयोग है, हालांकि कुछ भी जो' echo $ (foo) 'जैसा दिखता है बेहतर लिखित बस 'foo' (जब तक कि आप विशेष रूप से एक unquoted कमांड प्रतिस्थापन का उपयोग नहीं करते हैं ताकि शैल को व्हाइटस्पेस को सामान्यीकृत किया जा सके और' foo' से आउटपुट में वाइल्डकार्ड का विस्तार किया जा सके)। – tripleee

उत्तर

31

अपने crontab लाइन की वास्तविक समस्या $() या backquotes नहीं है। समस्या प्रतिशत संकेत % है। यह crontabs में एक विशेष अर्थ है।

मैनपेज से:

... 
Percent-signs (%) in the command, unless escaped with backslash (\), 
will be changed into newline characters, and all data after the 
first % will be sent to the command as standard input. 
... 

आप \ साथ प्रतिशत चिह्न यह अपेक्षा के अनुरूप काम करना चाहिए से बचने के हैं:

* * * * * echo $(date +\%F) >> /tmp/date.txt 

या

* * * * * echo `date +\%F` >> /tmp/date2.txt 

अपनी साइट पर दोनों काम करते हैं।

+2

ध्यान रखें कि बैकस्लैश खोल पर पास हो जाती है। तो एक कमांड ऊपर वाला एक काम करेगा क्योंकि शेल बैकस्लैश को स्ट्रिप्स करता है, लेकिन एक स्ट्रिंग के अंदर बैकस्लैश को खोलकर छोड़ा जाएगा, http://www.hcidata.info/crontab.htm –

+1

के अनुसार मैं क्रॉन से प्रतिशोध के साथ नफरत करता हूं – Willem

संबंधित मुद्दे