मेरा आज सुबह एक बाश टर्मिनल में यह अजीब व्यवहार था:
user@home:/home/user$ [ -f /etc/openvpn/client.conf ] && echo true
bash: [: missing «]»
user@home:/home/user$ [ -f /etc/openvpn/client.conf ] && echo true
true
- पहली कमांड को गेडिट के साथ संपादित स्क्रिप्ट से चिपकाया गया था ।
- दूसरे को सीधे टर्मिनल में टाइप किया गया था ।
कुछ खुदाई के बाद, मुझे पता चला है कि 30 वें चरित्र (क्लाइंट.कॉन्फ और "]" के बीच की जगह को हटा देना ) और इसे एक जगह के साथ बदलने से कमांड को फिर से काम करना पड़ा।
मेरी धारणा सही थी: एक अज्ञात खाली चरित्र कमांड में फिसल गया है , लेकिन सवाल यह है:
- मैं टर्मिनल में उन पात्रों को कैसे प्रकट कर सकता हूं ताकि मैं कमांड को डीबग कर सकूं? और अधिक महत्वपूर्ण:
- मैं इसे फिर से होने से कैसे रोक सकता हूं?
BTW, मैं Ubuntu 18.04 / फ्रेंच भाषा चला रहा हूं, जिस स्क्रिप्ट को मैं कमांड से चिपकाता हूं वह एक यूएसबी ड्राइव में है और हो सकता है कि इसे विंडोज पर भी संपादित किया गया हो।
आपके बहुत अच्छे उत्तरों के लिए धन्यवाद। खराब चरित्र c2 a0 गैर-ब्रेकिंग स्पेस UTF-8 वर्ण है। यह सवाल कि विशेष 'एम-बीएम-' चरित्र को कैसे हटाया जाए, इस चरित्र के बारे में दिलचस्प तथ्य है।
अजीब बात यह है कि स्क्रिप्ट इस चरित्र से मुक्त है। इसलिए मुझे नहीं पता कि यह कहां से आया है।
history 2|xxd
(क्योंकि history
कमांड स्वयं सूची में अंतिम है), या टाइप करें history|grep "CommandWithProblem"|xxd
। आप इसके बजाय किसी भी अन्य हेक्स प्रदर्शन कार्यक्रम का उपयोग कर सकते हैं xxd
, लेकिन यह मुझे पसंद है एक प्रारूप के लिए चूक है।
set -x
। यह आपको कमांड दिखाएगा और यह कैसे विभाजित है। यह जरूरी नहीं कि "बुरा चरित्र यहां" होगा, लेकिन यह आपको दिखाएगा कि बैश उस चरित्र पर विभाजित नहीं था।