সিনট্যাক্স ত্রুটি: ফাইলের অপ্রত্যাশিত শেষ - বাশ স্ক্রিপ্ট [বন্ধ]


20

আমি একটি স্প্রিটজ অ্যাপ তৈরির চেষ্টা করছি। সবকিছু ঠিকঠাক কাজ করছিল, তবে গতকাল থেকে আমি এই ত্রুটিটি পেতে থাকি:

./spritz: লাইন 176: সিনট্যাক্স ত্রুটি: ফাইলের অপ্রত্যাশিত শেষ

আমি স্ক্রিপ্ট ফাইলটি চেক করেছি এবং সবকিছু নিখুঁত বলে মনে হচ্ছে। আমি বিভ্রান্ত হয়ে পড়েছি, শেষ পর্যন্ত আমার কাছে একটি বিবৃতি আছে এবং এটি সঠিক দেখাচ্ছে! শেষ অংশটি এখানে:

#checks if speed is 150
157 if [[ $2 -eq 150 ]];
158 then
159 starttime=$SECONDS
160      FS=$'\n'
161      for j in `grep --color=always -iP '\b[^aeiou\s]*[aeiou][^aeiou\s]*\K[aeiou]' $1`;
162      do
163            #Reads the text file in the centre of the screen
164            echo "                                                    ___________________"
165            echo "                                                             $j";
166            echo "                                                    ___________________"
167            echo "                                                                               Speed 150 wpm"
168            sleep  0.9;
169            clear;
170       done
171 endtime=$(($SECONDS - $starttime))
172            echo "You read $words_read words in $endtime seconds!"
173       exit 8
174 fi

কী কারণে এই ত্রুটি হতে পারে?


(0) কাজ করা শেষ সংস্করণ থেকে আমাদের আলাদা দেখানোর জন্য এটি আরও কার্যকর হতে পারে। ………… ...…… ... কিছু পর্যবেক্ষণ (এটি সম্ভবত আপনার বর্তমান, নির্দিষ্ট সমস্যার সাথে সম্পর্কিত নয়): (১) কোনও ;লাইনের শেষে আপনার যখন অপরিবর্তিত (অর্ধিকোলন) দরকার তখন এমন কোনও পরিস্থিতিতে আমি জানি না । আপনি সেমিকোলনগুলি 157, 161, 165, 168 এবং 169 লাইনের শেষে মুছে ফেলতে পারেন ((বা আপনি এগুলিকে রেখে যেতে পারেন; আমার ধারণা এটি শৈলীর একটি প্রশ্ন)) ... (চালিত)
স্কট

1
(চালিয়ে যাওয়া) ... (2) আপনার কাছে সর্বদা শেল ভেরিয়েবলের উদ্ধৃতি দেওয়া উচিত যদি না আপনার কাছে যুক্তি না থাকে এবং আপনি যা করছেন তা আপনি নিশ্চিত জানেন; যেমন, "$1", "$2", "$SECONDS", এবং "$starttime"। (3) সঠিকভাবে ইনডেন্ট করা কোডটি পড়া এবং ডিবাগ করা সহজ। (4) আপনি সেট করছেন FSএবং তারপরে এটি ব্যবহার করছেন না কেন ? (5) `…`লেখা যেতে পারে $(…)। (6) $(($SECONDS - $starttime))সমানভাবে লেখা যেতে পারে $((SECONDS - starttime))। আবার এটি মূলত শৈলীর একটি বিষয়। ()) আপনি "$words_read"যখন লুপটিতে পরিবর্তন করছেন না কেন আপনি লুপটিতে মুদ্রণ করছেন?
স্কট

এখানে একটি ডিবাগিং পদ্ধতির: 157-174 লাইনগুলি মুছতে এবং আবার স্ক্রিপ্টটি চালানোর চেষ্টা করুন। আপনি যদি এখনও (সম্ভবত লাইন 157 বা 158 হচ্ছে হিসাবে রিপোর্ট) ভুল পান, তাহলে আপনি জানেন সমস্যা নয় লাইন 157-174, এবং আপনি আরও ফিরে দেখার (তাই, প্রক্রিয়ার পুনরাবৃত্তি না হওয়া পর্যন্ত ত্রুটি দূরে যায় আছে )। … (চালিয়ে যাওয়া)
স্কট

(চালিয়ে যাওয়া) ... ত্রুটিটি চলে যাওয়ার পরে, আপনি মুছে ফেলা শেষ লাইনগুলি আবার ভিতরে রেখে দিন এবং সেগুলি সরিয়ে ফেলা শুরু করুন। উদাহরণস্বরূপ, 157-174 লাইনগুলি মুছে ফেলার ফলে যদি ত্রুটিটি সরে যায় তবে সেগুলি আবার রেখে দিন, তবে তারপরে 159-160, 163-168 এবং 171-172 লাইনগুলি মুছুন। `grep …`মানগুলির একটি তালিকা দিয়ে প্রতিস্থাপনের চেষ্টা করুন । অন্য কথায়, নির্মূল প্রক্রিয়াটি ব্যবহার করুন।
স্কট

স্কটের কয়েকটি মন্তব্যে মন্তব্য: (বিজ্ঞাপন 2) আপনি যদি নিশ্চিত হন যে আপনি তখন কী করছেন (পোস্ট "$1"কোডটিতে ) কেবল উদ্ধৃতি প্রয়োজন, (বিজ্ঞাপন 4) সম্ভবত তার অর্থ IFS(এবং নয় FS)?
জেনিস

উত্তর:


29

ডায়াগনস্টিক "ফাইলের অপ্রত্যাশিত প্রান্ত" এমন একটি ইঙ্গিত যা আপনার কাছে কিছু মেলে না বা নির্বিঘ্নিত উদ্বোধনী সিনট্যাকটিকাল কনস্ট্রাক্ট ( ifডাব্লু / ও fi, doডাব্লু / ও done, বন্ধনী ডাব্লু / ও বন্ধ করার সাথে সম্পর্কিত ক্লোজিং, খোলার তবে নিরবচ্ছিন্ন উদ্ধৃতি ইত্যাদি) রয়েছে। স্ক্রিপ্টের শেষের দিকে নির্দেশ করা লাইন নম্বরটি আপনার সিনট্যাক্টিকাল নির্মাণগুলি পরিদর্শন করার কথা বলার বাইরে এই ক্ষেত্রে সহায়ক নয়; ত্রুটিটি আপনার কোডের যে কোনও জায়গায় থাকতে পারে। আপনাকে এটি পরীক্ষা করে দেখতে হবে।


জবাবের জন্য ধন্যবাদ. আমি ত্রুটিটি খুঁজে পেয়েছি এবং এটি ঠিক করেছি!
স্কট পিয়ার্স

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