লাইনে লাইন কাজ করছে না


1

লিপি

FILE="/u0146121/bin/list.txt"
while read line; do 
echo $line 
done < $FILE

আমি স্ক্রিপ্টিং বাশ করতে নতুন এবং লুপের সময় এটি বের করার চেষ্টা করছি। আমি একটি পাঠ্য ফাইল থেকে লাইন লাইন পড়তে এবং তারপরে একটি কমান্ড করতে চাই।

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

 No such file or directory121/bin/list.txt

কেহ এই ঠিক কিভাবে কি জানে?


1
আপনি কি echoপ্রথমটির পরে একটি দ্বিতীয় যুক্ত করার চেষ্টা করেছেন ? echo $line; echo। এটি আপনার সমস্যার সমাধান করবে না, তবে এটি আপনাকে পুরো ত্রুটি বার্তাটি দেখার অনুমতি দিতে পারে। সম্ভবত আপনার ফাইলের নাম বাদে আপনার স্ক্রিপ্টে আমি স্পষ্টত ভুল কিছু দেখছি না।
একটি সিভিএন

আপনি শেবাং লাইনটি প্রতিস্থাপন করলে কী হবে #!/bin/bash -x? ( -xএবং -vঅতিরিক্ত ডিবাগিং তথ্য সক্ষম করুন)।
হেনেস

উত্তর:


3

আমি সন্দেহ করি আপনার স্ক্রিপ্টের ডস-স্টাইলের লাইনের শেষ থাকতে পারে। ডস (এবং উইন্ডোজ) এ, একটি পাঠ্য ফাইলের প্রতিটি লাইন ক্যারেজ রিটার্নের সাথে শেষ হয় (বিভিন্নভাবে \rবা হিসাবে প্রদর্শিত হয় ^M) এর পরে লাইনফিড ( \nবা ^J) থাকে। অন্যদিকে, ইউনিক্স পাঠ্য ফাইলগুলি প্রতিটি লাইনকে কেবল একটি লাইনফিড দিয়ে শেষ করে। আপনি যদি কোনও ইউনিক্স সরঞ্জামকে (বাশের মতো) ডস-ফর্ম্যাটযুক্ত ফাইল দেন তবে এটি গাড়ীর ফেরতের বিষয়টি লাইনের অংশ হিসাবে ব্যাখ্যা করবে এবং বেশ বিভ্রান্ত হবে। এই ক্ষেত্রে, এটি আমার কাছে দেখে মনে হচ্ছে যেমন ফাইলটি আসলে সেট আপ হয়ে যাচ্ছে /u0146121/bin/list.txt^M, যা বিদ্যমান নেই, এবং শেল যখন সমস্যার কথা জানায় তখন গাড়ীর ফেরত টার্মিনালটিকে বিভ্রান্ত করে এবং ত্রুটির বার্তাটির শেষ প্রারম্ভের উপরের দিকে মুদ্রিত হয়ে যায়।

পরীক্ষা করতে, আপনার স্ক্রিপ্টটি প্রিন্ট করে cat -v /path/to/scriptদেখুন - আপনি যদি লাইনগুলির শেষে এম ^ এম দেখতে পান তবে আপনার একটি ডস-ফর্ম্যাট ফাইল রয়েছে। আপনার সিস্টেম সম্ভবত এটিকে অনুবাদ করতে কমান্ড আছে, কিন্তু কমান্ড নাম পরিবর্তিত হয় (যেমন এটা হতে পারে dos2unixবা fromdosবা ...)। যদি আপনি কোনও প্রাসঙ্গিক কমান্ড না খুঁজে পান তবে আপনি এই তুচ্ছ পার্ল স্ক্রিপ্টটি ব্যবহার করতে পারেন:

perl -pi -e 's/\r//g' /path/to/script

আপনি ঠিক বলেছেন এটিতে একটি মাইল রয়েছে।
এমক্রাউজ

0

আপনি সম্ভবত যা করছেন তা আপনি সম্ভবত আমাদের দেখাচ্ছেন না। ত্রুটি বার্তাটি হ'ল

No such file or directory121/bin/list.txt

যা $FILEএর 121/bin/list.txtপরিবর্তে রয়েছে তা দেখায় /u0146121/bin/list.txtআমি অনুমান করতে পারি যে আপনি আসলে চালাচ্ছেন না FILE="/u0146121/bin/list.txt"তবে FILE="121/bin/list.txt"

যাই হোক না কেন, ভেরিয়েবলকে এটির কাজ করে কিনা তা নির্ধারণ না করে এটি চালানোর চেষ্টা করুন:

while read line; do 
  echo $line;
done < /u0146121/bin/list.txt

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