त्रुटि संदेश syntax error near unexpected token `(‘ Unix-प्रकार के वातावरण, Cygwin, और Windows में कमांड-लाइन इंटरफेस में होता है। यह त्रुटि सबसे अधिक तब ट्रिगर होगी जब आप एक शेल स्क्रिप्ट चलाने का प्रयास करते हैं जिसे पुराने DOS/Windows या Mac सिस्टम में संपादित या बनाया गया था।

यह त्रुटि संदेश तब भी सामने आता है जब आप रोजमर्रा के कार्यों जैसे मैन्युअल रूप से फाइलें कॉपी करने आदि के लिए Linux कमांड लाइन में कमांड दर्ज कर रहे होते हैं। इस त्रुटि संदेश के होने के मुख्य कारण या तो खराब सिंटैक्स है या OS की किसी अन्य सिस्टम के कमांड/शेल की व्याख्या करने में समस्या।
Syntax Error near unexpected token `(‘ के कारण क्या हैं?
इस त्रुटि संदेश के कारण बहुत विविध हैं और इन्हें एक लेख में सूचीबद्ध नहीं किया जा सकता क्योंकि कमांड निष्पादित करते समय सिंटैक्स गलत होने की हजारों संभावनाएं हैं। इस त्रुटि के मुख्य कारण हैं:
- किसी भी प्लेटफॉर्म पर कमांड निष्पादित करते समय खराब सिंटैक्स। या तो आप कमांड का सही उपयोग नहीं कर रहे हैं या गलत सिंटैक्स दर्ज किया है।
- शेल Unix/DOS सिस्टम के बीच संगत नहीं है।
- दूसरे स्रोत से bash शेल स्क्रिप्ट चलाने में समस्याएं हैं।
इस लेख में, हम मानते हैं कि आप कोडिंग की मूल बातें जानते हैं और आपको पता है कि आप क्या कर रहे हैं। यदि आप शुरुआती हैं, तो बेहतर है कि आप जिस भाषा/कमांड को निष्पादित करने का प्रयास कर रहे हैं, उसके गहन ट्यूटोरियल का पालन करें। आपने शायद सिंटैक्स की कोई गलती की है।
समाधान 1: कमांड के सिंटैक्स और प्रारूप की जांच करना
पहला और सबसे महत्वपूर्ण कारण जिसके कारण आप इस त्रुटि संदेश का अनुभव कर सकते हैं, वह है आपके कोड में खराब सिंटैक्स या आप कमांड के सटीक प्रारूप का पालन नहीं कर रहे हैं। प्रत्येक कमांड का एक पूर्वनिर्धारित प्रारूप होता है जिसे आप इसके दस्तावेज़ीकरण में देख सकते हैं। कई पैरामीटर वैकल्पिक होते हैं जबकि अन्य अनिवार्य होते हैं।
इसके अलावा, अतिरिक्त स्पेस, डबल कोट्स के उपयोग, और आवश्यक अनिवार्य पैरामीटर्स का विशेष ध्यान रखा जाना चाहिए। यदि उनमें से कोई भी गायब है या गलत तरीके से घोषित किया गया है, तो आप अपना कोड निष्पादित नहीं कर पाएंगे।
उदाहरण के लिए, निम्न कोड के बजाय
[mycom7] # ./ctopo.sh um_test1 [(1,2),(2,1)]
आपको इसे इस तरह निष्पादित करना होगा
[mycom7] # ./ctopo.sh um_test1 "[(1,2),(2,1)]"
साथ ही, सुनिश्चित करें कि यदि आपका कमांड/शेल स्क्रिप्ट कई पंक्तियों में फैला है तो आप इसे सही ढंग से निष्पादित कर रहे हैं।
पैरामीटर प्रकार के कारण, डबल कोट्स आवश्यक हैं। एक अतिरिक्त स्पेस भी आपके कोड को बर्बाद कर सकता है और त्रुटि संदेश को बाध्य कर सकता है। सुनिश्चित करें कि आप जिस कमांड को निष्पादित कर रहे हैं उसके आधिकारिक दस्तावेज़ीकरण की जांच करें और देखें कि क्या वहां कोई समस्या है।
समाधान 2: अपनी शेल स्क्रिप्ट का समस्या निवारण
यदि आप एक शेल स्क्रिप्ट का उपयोग कर रहे हैं जो स्रोत सिस्टम में काम करती है लेकिन लक्ष्य में त्रुटि लौटाती है, तो आप निष्पादन के दौरान संग्रहीत चर की जांच करके स्क्रिप्ट का समस्या निवारण कर सकते हैं और फिर देख सकते हैं कि क्या समस्या पैदा कर रहा है। यह एक बहुत ही सामान्य कारण है क्योंकि कई मामलों में, शेल एक अनप्रिंटेबल कैरेक्टर की व्याख्या करने का प्रयास करता है।
'vx' पैरामीटर के साथ शेल चलाने का प्रयास करें। यह हमें दिखाएगा कि कौन से कमांड चलाए जा रहे हैं और स्क्रिप्ट में कौन से मान संग्रहीत हैं। इसके माध्यम से आप समस्या निवारण कर सकते हैं और निदान कर सकते हैं कि क्या गलत हो रहा है।
उदाहरण के लिए, 'vx' को शामिल करके स्क्रिप्ट को टर्मिनल में निष्पादित करें:
# sh -vx ./test_script5.sh
आप 'cat' कमांड का उपयोग करके स्क्रिप्ट की सामग्री की जांच कर सकते हैं:
# cat test_script5.sh
समाधान 3: 'dos2unix.exe' कमांड का उपयोग करना
Windows/DOS टेक्स्ट फाइलों में, एक नई लाइन कैरिज रिटर्न (\r) और उसके बाद लाइन फीड (\n) का संयोजन होती है। Mac (Mac OS X से पहले) में, लाइन ब्रेक एक साधारण कैरिज रिटर्न (\r) का उपयोग करता था। Unix/Linux और Mac OS X लाइन फीड (\n) लाइन ब्रेक का उपयोग करते हैं। यदि आप Cygwin का उपयोग कर रहे हैं, तो यह DOS/Windows और पुराने Mac द्वारा बनाई गई स्क्रिप्ट को अतिरिक्त कैरिज रिटर्न (\r) कैरेक्टर के कारण प्रोसेस करने में विफल होगा।

यहां आप 'dos2unix.exe' कमांड का उपयोग कर सकते हैं जो स्क्रिप्ट को सही प्रारूप में बदल देगा और फिर आप इसे बिना किसी समस्या के निष्पादित कर सकते हैं।
निष्कर्ष निकालने के लिए, आपको अपने कमांड और आपके द्वारा उपयोग किए जा रहे प्लेटफॉर्म के प्रकार पर शोध करने की आवश्यकता है और सुनिश्चित करें कि कोई विसंगतियां नहीं हैं। चूंकि हम हर संभावना को कवर नहीं कर सकते, आपको पता होगा कि किस प्रकार की त्रुटियां हो सकती हैं और उन्हें कैसे ठीक किया जाए।