সিনট্যাক্স এরর নিয়ার আনেক্সপেক্টেড টোকেন `(‘ ত্রুটি বার্তা ইউনিক্স-টাইপ এনভায়রনমেন্ট, সাইগউইন এবং উইন্ডোজের কমান্ড-লাইন ইন্টারফেসে দেখা যায়। এই ত্রুটি সবচেয়ে বেশি সম্ভবত ট্রিগার হয় যখন আপনি একটি শেল স্ক্রিপ্ট চালানোর চেষ্টা করেন যা পুরানো DOS/উইন্ডোজ বা ম্যাক সিস্টেমে এডিট বা তৈরি করা হয়েছে।

এই ত্রুটি বার্তা তখনও দেখা যায় যখন আপনি লিনাক্স কমান্ড লাইনে রোজমর্রার কাজের জন্য কমান্ড এন্টার করেন যেমন ফাইল কপি করা ইত্যাদি। এই ত্রুটির মূল কারণ হলো অথবা ভুল সিনট্যাক্স অথবা অন্য সিস্টেমের কমান্ড/শেল ইন্টারপ্রেট করার সমস্যা।
সিনট্যাক্স এরর নিয়ার আনেক্সপেক্টেড টোকেন `(‘-এর কারণ কী?
এই ত্রুটির কারণগুলো খুব ডাইভার্স এবং এক আর্টিকেলে লিস্ট করা সম্ভব না কারণ কমান্ড এক্সিকিউট করার সময় সিনট্যাক্স ভুল হওয়ার হাজার হাজার সম্ভাবনা রয়েছে। মূল কারণগুলো হলো:
- যে কোনো প্ল্যাটফর্মে কমান্ড এক্সিকিউট করার সময় ভুল সিনট্যাক্স। আপনি কমান্ডটি সঠিকভাবে ব্যবহার করছেন না বা ভুল সিনট্যাক্স লিখেছেন।
- শেলটি ইউনিক্স/DOS সিস্টেমের মধ্যে কম্প্যাটিবল নয়।
- অন্য সোর্স থেকে ব্যাশ শেল স্ক্রিপ্ট রান করার সময় সমস্যা হচ্ছে।
এই আর্টিকেলে আমরা অনুমান করছি আপনি কোডিংের বেসিক জানেন এবং আপনি কী করছেন তার ধারণা আছে। আপনি যদি বিগিনার হন, তবে আপনি যে ল্যাঙ্গুয়েজ/কমান্ড এক্সিকিউট করার চেষ্টা করছেন তার ইন-ডেপথ টিউটোরিয়াল ফলো করা ভালো। আপনি সম্ভবত কোনো সিনট্যাক্স ভুল করেছেন।
সমাধান ১: কমান্ডের সিনট্যাক্স ও ফরম্যাট চেক করা
আপনি এই ত্রুটি পাওয়ার প্রথম ও ফরমোস্ট কারণ হলো আপনার কোডে ভুল সিনট্যাক্স বা আপনি কমান্ডের একজাক্ট ফরম্যাট ফলো করছেন না। প্রতিটি কমান্ডের একটি প্রিডিফাইনড ফরম্যাট থাকে যা এর ডকুমেন্টেশনে পাওয়া যায়। কিছু প্যারামিটার অপশনাল অন্যগুলো ماندেটরি।
অতিরিক্ত যত্ন নেওয়া উচিত এক্সট্রা স্পেস, ডাবল কোটস ব্যবহার, এবং মান্ডেটরি প্যারামিটারগুলো আবশ্যক। যদি এগুলোর যেকোনো একটিমissing থাকে বা ভুলভাবে ডিক্লেয়ার করা হয়, তবে আপনি আপনার কোড এক্সিকিউট করতে পারবেন না।
উদাহরণস্বরূপ, নিচের কোডের বদলে
[mycom7] # ./ctopo.sh um_test1 [(1,2),(2,1)]
এভাবে এক্সিকিউট করতে হবে
[mycom7] # ./ctopo.sh um_test1 "[(1,2),(2,1)]"
এছাড়া নিশ্চিত করুন আপনি আপনার কমান্ড/শেল স্ক্রিপ্ট সঠিকভাবে এক্সিকিউট করছেন যদি এটি একাধিক লাইনে থাকে।
প্যারামিটার টাইপের কারণে ডাবল কোটস আবশ্যক। একটা এক্সট্রা স্পেসও আপনার কোড خرাব করে দিতে পারে এবং এরর মেসেজ বাধ্য করতে পারে। নিশ্চিত করুন আপনি যে কমান্ড এক্সিকিউট করছেন তার অফিসিয়াল ডকুমেন্টেশন চেক করেছেন এবং সেখানে কোনো সমস্যা আছে কিনা।
সমাধান ২: আপনার শেল স্ক্রিপ্ট ট্রাবলশুট করা
আপনি যদি একটি শেল স্ক্রিপ্ট ব্যবহার করেন যা সোর্স সিস্টেমে কাজ করে কিন্তু টার্গেটে এরর দেয়, তবে আপনি স্ক্রিপ্টটি ট্রাবলশুট করতে পারেন এক্সিকিউশন সময় স্টোর হওয়া ভেরিয়েবলগুলো চেক করে এবং দেখে কী সমস্যা সৃষ্টি করছে। এটি খুব সাধারণ কারণ কারণ কयी কেসে শেল একটি আনপ্রিন্টেবল ক্যারেক্টার ইন্টারপ্রেট করার চেষ্টা করে।
‘vx’ প্যারামিটারসহ শেল রান করার চেষ্টা করুন। এটি আমাদের দেখাবে কী কমান্ডগুলো রান হচ্ছে এবং স্ক্রিপ্টে কী ভ্যালু স্টোর হচ্ছে। এর মাধ্যমে আপনি ট্রাবলশুট এবং ডায়াগনোজ করতে পারেন কী ভুল হচ্ছে।
উদাহরণস্বরূপ, ‘vx’ ইনক্লুড করে টার্মিনালে স্ক্রিপ্ট এক্সিকিউট করুন:
# sh -vx ./test_script5.sh
‘cat’ কমান্ড ব্যবহার করে স্ক্রিপ্টের কন্টেন্ট চেক করতে পারেন:
# cat test_script5.sh
সমাধান ৩: ‘dos2unix.exe’ কমান্ড ব্যবহার করা
উইন্ডোজ/DOS টেক্সট ফাইলে, একটি নিউ লাইন হলো ক্যারেজ রিটার্ন (\r) এর পর লাইন ফিড (\n) এর কম্বিনেশন। ম্যাকএসে (ম্যাক ওএস এক্সের আগে), লাইন ব্রেক একটি সিম্পল ক্যারেজ রিটার্ন (\r) ব্যবহার করত। ইউনিক্স/লিনাক্স এবং ম্যাক ওএস এক্স লাইন ফিড (\n) লাইন ব্রেক ব্যবহার করে। আপনি যদি সাইগউইন ব্যবহার করেন, তবে এটি DOS/উইন্ডোজ এবং পুরানো ম্যাক দ্বারা তৈরি স্ক্রিপ্ট প্রসেস করতে ব্যর্থ হবে এক্সট্রা ক্যারেজ রিটার্ন (\r) ক্যারেক্টারের কারণে।

এখানে আপনি ‘dos2unix.exe’ কমান্ড ব্যবহার করতে পারেন যা স্ক্রিপ্টটি সঠিক ফরম্যাটে কনভার্ট করবে এবং তারপর আপনি কোনো ইশ্যু ছাড়া এক্সিকিউট করতে পারবেন।
উপসংহারে, আপনার কমান্ডগুলো এবং আপনি যে প্ল্যাটফর্ম ব্যবহার করছেন সেটি রিসার্চ করুন এবং নিশ্চিত করুন কোনো ডিসক্রেপ্যান্সি নেই। যেহেতু আমরা প্রতিটি সম্ভাবনা কভার করতে পারি না, তবুও আপনার ধারণা হবে কী ধরনের এরর হতে পারে এবং কীভাবে সেগুলো ঠিক করতে হয়।