मेरे पास एक छोटी स्क्रिप्ट है जो केवल वर्तमान तिथि को प्राप्त करती है, एक PHP स्क्रिप्ट चलाता है और आउटपुट (और त्रुटियों) को वर्तमान तिथि वाले फ़ाइलनाम पर पुनर्निर्देशित करता है।
DATE=$(date +"%Y%m%d")
FILE="log/${DATE}.log"
php -q script.php >> $FILE 2>&1
जब मैं अपनी स्थानीय मशीन (विंडोज 7, एप्टाना आईडीई) पर इस स्क्रिप्ट को चलाता हूं, तो PHP स्क्रिप्ट ठीक काम करती है और लॉगफाइल में अपेक्षित फ़ाइल नाम, जैसे 20140502.log
।
लेकिन जब मैं उस स्क्रिप्ट को SFTP के माध्यम से अपनी रिमोट मशीन पर धकेलता हूं और उस स्क्रिप्ट को निष्पादित करता हूं, तो फाइलनेम इस तरह दिखता है:
20140502?.log?
क्या समस्या हो सकती है? क्या यह एक त्रुटि है (जैसे SFTP अपलोड के लिए एन्कोडिंग ANSII है, जहाँ UTF-8 अपेक्षित है)? या मुझे स्क्रिप्ट में ही कुछ बदलना है?
सिस्टम / शेल के बारे में जानकारी:
[foo@bar path]$ sh --version
GNU bash, version 3.2.25(1)-release (x86_64-redhat-linux-gnu)
मजेदार तथ्य: यदि उस स्क्रिप्ट को क्रोनजोब कहा जाता है, तो प्रश्न चिह्न नहीं लगता है। केवल अगर मैं स्क्रिप्ट को मैन्युअल रूप से चलाता हूं।
LANG=en_US.UTF-8
।
2>&1 >> $FILE
) का यह क्रम टर्मिनल और फ़ाइल में stdout को भेजता है? यदि आप चाहते हैं कि >> $FILE 2>&1
?
इंगित करता है कि एक चरित्र प्रदर्शित नहीं किया जा सकता है। निश्चित रूप से एक एन्कोडिंग अंतर की तरह लगता है। क्या आप हमें इसका आउटपुट दे सकते हैंenv|grep -E '(LC|LANG)'
?