जब मेरे रिमोट मशीन पर स्क्रिप्ट चलती है तो फ़ाइल नाम में प्रश्न चिह्न क्यों होता है?


10

मेरे पास एक छोटी स्क्रिप्ट है जो केवल वर्तमान तिथि को प्राप्त करती है, एक 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)

मजेदार तथ्य: यदि उस स्क्रिप्ट को क्रोनजोब कहा जाता है, तो प्रश्न चिह्न नहीं लगता है। केवल अगर मैं स्क्रिप्ट को मैन्युअल रूप से चलाता हूं।


आमतौर पर ?इंगित करता है कि एक चरित्र प्रदर्शित नहीं किया जा सकता है। निश्चित रूप से एक एन्कोडिंग अंतर की तरह लगता है। क्या आप हमें इसका आउटपुट दे सकते हैं env|grep -E '(LC|LANG)'?
0xC0000022L

@ 0xC0000022L आउटपुट है LANG=en_US.UTF-8
गॉटलीब नॉट्सनबेल

अस्पष्ट होने के लिए खेद है। मेरा मतलब था कि दोनों छोर पर आउटपुट है।
0xC0000022L

याद आ रही है कि क्षमा करें ... दुर्भाग्य से इस आदेश Windoze पर कुछ भी उत्पादन नहीं करता है: /
Gottlieb Notschnabel

1
क्या आप जानते हैं कि पुनर्निर्देशन ( 2>&1 >> $FILE) का यह क्रम टर्मिनल और फ़ाइल में stdout को भेजता है? यदि आप चाहते हैं कि >> $FILE 2>&1
स्टेडर

जवाबों:


17

संभवतः आपके पास लाइनों के अंत में कुछ गैर-मुद्रण योग्य वर्ण हैं (उदाहरण के लिए विंडोज से CRLF), भागो:

cat -A scriptname

रिमोट मशीन पर, यह आपको आपकी स्क्रिप्ट में सभी वर्ण दिखाएगा। फिर, आप यूनिक्स-जैसे प्रारूप को चला सकते हैं

dos2unix scriptname

3

उत्तर के प्रयास के बाद इसे ठीक करने के लिए नोटपैड ++ बहुत उपयोगी पाया गया

cat-scriptname>

dos2unix scriptname

क्योंकि यह अभी भी त्रुटियों को प्रस्तुत करने की कोशिश कर रहा है।

नोटपैड ++ के माध्यम से संपादन मेनू / ईओएल रूपांतरण / यूनिक्स / ओएसएक्स प्रारूप में विकल्प है।

अभी भी बहुत कुछ सीखने वाला है, लेकिन इस पद्धति ने मेरी समस्या को हल कर दिया, हालांकि पिछले समाधान ने यह खोजने में सहायता की कि समस्या कहां थी।

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