শেল স্ক্রিপ্ট ব্যর্থ: সিনট্যাক্স ত্রুটি: "(" অপ্রত্যাশিত)


64

আমি এমন একটি স্ক্রিপ্টে কাজ করছি যা রাস্পবেরি পাই বিকাশের জন্য বিকাশের পরিবেশ স্থাপন করতে স্বয়ংক্রিয়ভাবে কাজ করে (ধাপে ধাপে বিশদ যা কাজ এখানে রয়েছে )। স্ক্রিপ্টটি সেই নিবন্ধটিতে লিঙ্কযুক্ত রয়েছে তবে সুবিধার্থে আপনি এটি এখানেও খুঁজে পেতে পারেন । এখন এই স্ক্রিপ্টটি ইনস্টল করুন এবং ত্রুটি ছাড়াই পরিবেশ স্থাপন করুন তবে ডিফল্টরূপে সুডোর টাইম-আউট মানের কারণে আপনাকে আপনার সুডো পাসওয়ার্ড একাধিকবার প্রবেশ করতে হবে। সুতরাং আমি সমস্ত সুডো লাইনগুলি সরিয়ে এবং এইভাবে কমান্ড লাইনে সুডোর মাধ্যমে পুরো স্ক্রিপ্টটি চালিয়ে পরীক্ষা শুরু করেছি:

kemra102@ubuntuvm:~$ sudo ./pi_dev_env_install.sh

এটি প্রত্যাশার মতো সূক্ষ্মভাবে কাজ করে এবং এই পয়েন্ট অবধি বেশিরভাগ পথে চলে:

./pi_dev_env_install: 68: ./pi_dev_env_install.sh: Syntax error: "(" unexpected

Sudo দিয়ে পুরো স্ক্রিপ্টটি চালনা না করে এখন এই লাইনটি আগে কাজ করেছিল। সুডো হিসাবে চলমান এই লাইনটির কিছুই নেই যা এটি আমার জ্ঞানের সাথে কাজ করা বন্ধ করে দেয়, কারও কি কোনও ধারণা আছে?


1
শেবাং কি সত্যিই 9 লাইনে আছে? উবুন্টুর ড্যাশআসবিনস অ্যাফিনিটির কারণে আমার সন্দেহ হয় আপনার স্ক্রিপ্টটি dashপরিবর্তে এর দ্বারা ব্যাখ্যা করা হয়েছে bash
শেবাংকে

সেই নিবন্ধ অনুসারে / বিন / শ উইলের পরিবর্তে সরাসরি / বিন / বাশকে কল করা; ড্যাশের পরিবর্তে সঠিকভাবে ব্যাশ ব্যবহার করুন যাতে এটি বুঝতে সমস্যা হবার নয়। আমি এখনও অবশ্যই শেবাং সরাতে পারি, তবে আপনি যখন পুরো স্ক্রিপ্টে sudo না করেন তখন কেন এটি কাজ করে তা সত্যই তা ব্যাখ্যা করে না।
কেমরা 102

আমার ক্ষেত্রে সবকিছু ঠিকঠাক থাকলেও অভ্যাস হিসাবে, আমি আমার শেল স্ক্রিপ্টটি "sh" দিয়ে চালিয়ে যাচ্ছিলাম "বাশ" দিয়ে নয়।
ইন্দ্রজিৎ গৌর

উত্তর:


82

স্ক্রিপ্টটি শেবাং লাইন দিয়ে শুরু হয় না , সুতরাং সিস্টেম এটি দিয়ে এটি সম্পাদন করে /bin/sh। উবুন্টু তারিখে /bin/shহয় ড্যাশ , একটি শেল ফাস্ট প্রারম্ভে এবং শুধুমাত্র মান বৈশিষ্ট্য সঙ্গে সঞ্চালনের জন্য পরিকল্পিত। ড্যাশ 68 লাইনে পৌঁছালে, এটি একটি বাক্য গঠন ত্রুটি দেখতে পায়: প্যারেনেসিসের প্রসঙ্গে এটির কোনও অর্থ নেই।

যেহেতু ড্যাশ (অন্যান্য সমস্ত শাঁসের মতো) একজন দোভাষী, তাই কার্যকর করা সমস্যাযুক্ত লাইনে না আসা পর্যন্ত অভিযোগ করবে না। সুতরাং এমনকি যদি স্ক্রিপ্টটি আপনার পরীক্ষার কোনও পর্যায়ে সফলভাবে শুরু হয়ে যায়, তবে একবার লাইন 68 পৌঁছে গেলে তা বাতিল হয়ে যায়।

শেবাং লাইন অবশ্যই ফাইলের প্রথম জিনিস হতে হবে। যেহেতু আপনি ব্যাশ বৈশিষ্ট্যগুলি ব্যবহার করেন, ফাইলের প্রথম লাইনটি অবশ্যই হতে হবে #!/bin/bashবা #!/usr/bin/env bash


2
ধন্যবাদ আমার জ্ঞানের স্পষ্টতই একটি ফাঁক, আমি এতটা স্ক্রিপ্ট করি না যা সম্পর্কে অবগত ছিল না! এটি অনেক সাহায্য করেছে এবং ভবিষ্যতেও জানার জন্য এটি বেশ কার্যকর হবে বলে ব্যাখ্যাটির জন্য ধন্যবাদ।
কেমরা 102

আমাকে যুক্ত করতে দাও যে নটিলাসের জন্য স্ক্রিপ্ট এক্সটেনশন ব্যবহার করার সময়ও এই ত্রুটি ঘটে occurs শেবাং লাইন যুক্ত করা অবিলম্বে এটি সমাধান করেছে। +1 টি।
ভাবিন দোশি

sonarqube.shউবুন্টু 15.10 এ চলমান সমস্যার মুখোমুখি । যেমনটি শিরোনাম বদলেছে। কার্যকর করা হচ্ছে sudo sh ./sonar.sh console। তবুও ত্রুটি হচ্ছে।
soufrk

@ সউফ্রাক এটা sonarqube.shনাকি sonar.sh? তোমার মনস্থির কর. এবং যাইহোক, আপনি যদি এই থ্রেডের তথ্য দিয়ে সমস্যাটি সমাধান করতে না পারেন তবে স্ক্রিপ্টের সম্পূর্ণ সামগ্রী সহ একটি নতুন প্রশ্ন জিজ্ঞাসা করুন এবং সম্পূর্ণ ত্রুটির বার্তাটি অনুলিপি করুন।
গিলস

আমার খারাপ !! কার্যকর খাঁটি কার্যকর কার্যকর ছিল arch তবে মজার বিষয় হল, সঠিক খিলানটিতে ফাইলটি #! /bin/shপুরোপুরি সম্পাদন করা শুরু হয়েছিল । এখন, এটি আমাকে বিস্মিত করে।
soufrk

6

শেবাং যদি প্রথম লাইনে না থাকে তবে মূল ব্যবহারকারীর শেল, SHELLপরিবর্তনশীল বা -sপতাকা নির্বিশেষে এটি সম্মানিত হবে না । আপনি সহজেই এটি একটি সাধারণ উদাহরণ সহ নিশ্চিত করতে পারেন:

#
#!/bin/bash
offfset=(`ls`)
echo $offset

Sudo দিয়ে এই স্ক্রিপ্টটি চালানো উবুন্টু এবং ডেবিয়ানের সাম্প্রতিক সংস্করণগুলিতে একটি সিনট্যাক্স ত্রুটি বাড়িয়ে তুলবে।

স্ক্রিপ্টটির দ্বারা ব্যাখ্যা করা হয়েছে তা নিশ্চিত করার জন্য আপনার কাছে দুটি বিকল্প রয়েছে bash:

  1. প্রথম লাইনে শেবাং সরান

  2. sudoএভাবে চালান :

    sudo bash ./pi_dev_env_install.sh

1

আমার সাথে স্ক্রিপ্ট শুরু:

bash ./< script file > 

ঠিকভাবে কাজ করে.


আপনার পক্ষে এটি সত্য হতে পারে তবে এটি বর্ণিত সমস্যার কোনও সমাধান নয়।
bu5hman

0

ডায়ার বা ফাইলের নামটিতে আপনার একটি "(") থাকতে পারে।


0

স্ক্রিপ্ট ফাইলে ডস 2 ইউনিক্স ব্যবহার করে দেখুন। কখনও কখনও উত্স মধ্যে কিছু লুকানো অক্ষর আছে।

কমান্ড প্রয়োগ করুন:

dos2unix script_file.sh script_file.sh

0

আপনি যদি ইচ্ছাকৃত অনুবাদককে ওভাররাইড করেন তবে এটি ঘটতে পারে। উদাহরণস্বরূপ, এটি হ্যাশ ব্যাং ব্যবহৃত হয় তা বিবেচনা করেই চলবে (হ্যাশ ব্যাং ব্যবহার না করা সহজ):

> sh run.sh

বা বাশ চালাতে:

> bash run.sh

স্ক্রিপ্টটিকে সংজ্ঞায়িত হ্যাশ ব্যাং মানটি ব্যবহার করতে, এটি ব্যবহার করুন:

> ./run.sh

-1
sudo chmod 755 <script>

আমার ক্ষেত্রে ত্রুটিটি ফাইলটি কার্যকর করার অনুমতিগুলির অভাব ছিল। আমি যখন আদেশগুলি পৃথক করেছিলাম তখনই ত্রুটি বার্তাটি পেয়েছে:

$ sudo sh
# ./install

অনুমতি অভাব এই ত্রুটি বার্তা কারণ না।
গিলস
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.