আমি কেন "লাইন 1: $ ': \ r': কমান্ড খুঁজে পাইনি"?


13

আমি আমার ল্যাপটপে (ডস) সাইগউইন ব্যবহার করেছি। আমার সহকর্মীদের এবং আমার নিজের থেকে স্ক্রিপ্টগুলির সংগ্রহ রয়েছে। আমি আইটি ব্যক্তি নই, ইউনিক্সে জ্ঞাত নই। আমি আমার সহকর্মীদের সিনট্যাক্স অনুসরণ করি এবং কয়েকটি সহজ জিনিস পরিচালনা করতে সক্ষম।

স্ক্রিপ্টগুলি আমার পুরানো ল্যাপটপে ভাল কাজ করেছে। আমি সবেমাত্র ল্যাপটপ পরিবর্তন করেছি, সাইগউইন ইনস্টল করেছি। আমি যখন আমার স্ক্রিপ্টগুলি চালনা করি তখন সেগুলি কাজ করে না। আমি যে ত্রুটি বার্তাটি পাই তার একটি উদাহরণ এখানে:

line 1: $':\r': command not found
line 5: syntax error near unexpected token `$'\r''
line 5: `fi

আমার স্ক্রিপ্টের শীর্ষ 5 লাইন এখানে

:
iter=1
if [ -f iter.txt ]
   then rm ./iter.txt 
fi  

কেউ দয়া করে ব্যাখ্যা করতে পারেন যে আমি কীভাবে এই সমস্যাটি পেতে পারি?

উত্তর:


29

আপনার উইন্ডোজ-স্টাইলের লাইনের শেষ রয়েছে।

অপ-কমান্ডটি :পরিবর্তে হিসাবে পড়তে হবে :<carriage return>, যেমন :\rবা আরও সম্পূর্ণ হিসাবে প্রদর্শিত হবে $':\r'

চালান dos2unix scriptnameএবং আপনার ভাল করা উচিত।


আপনার যদি না থাকে dos2unixতবে নিম্নলিখিতগুলি প্রায় কোথাও কাজ করা উচিত (এবং আমি উইন্ডোজের মোবাএক্সটারমে পরীক্ষা করেছি):

vi -b filename

তারপরে viটাইপ করুন:

:%s/\r$//
:x

আপনি যেতে ভাল।


ইন vim, যা আপনার জন্য কি Cygwin উপর ব্যবহার করা হয় vi, সেখানে এই কাজ করার একাধিক উপায় আছে। অন্য একটিতে fileformatসেটিংস জড়িত , যা মানগুলি নিতে পারে dosবা unix। হয় ফাইলটি লোড করার পরে স্পষ্টতই এটি পরিবর্তন করুন

ফাইল ফর্ম্যাট = ইউনিক্স সেট করুন
বা স্পষ্টতই ফাইল ফর্ম্যাটটি জোর করে ফাইলটি লেখার সময়

: w + ফাইল ফর্ম্যাট = ইউনিক্স ix

এ সম্পর্কে আরও তথ্যের জন্য, এই বিষয়টি কভার করে এখানে অনেকগুলি প্রশ্ন এবং উত্তর দেখুন:


কেবল পরিষ্কার করতে চাই, "ইটার = 1" আমার কাউন্টার যা গণিতের অ্যালগোরিদমের রাউন্ডের সংখ্যার জন্য ব্যবহার করা হবে যা আমার মডেলটি পরে লাইন 5 এর বাইরে পুনরাবৃত্তি করতে হবে I আমি কেবল শীর্ষ 5 টি লাইন পোস্ট করেছি সাথে যেতে ভুল বার্তা. সমস্ত মন্তব্য এবং নির্দেশ প্রশংসা করা হয় !!
টিফাম

আমি কেবল "command tr -d ....." প্রস্তাবিত কমান্ডটি চেষ্টা করেছি তবে আমার ল্যাপটপে কিছু সমস্যা আছে। এটি "$" এ ফিরে যায় না তবে পরিবর্তে ">" স্ক্রিনে উপস্থিত হয়। বাইরে যেতে আমাকে কনট্রোল সি ব্যবহার করতে হবে। তারপরে, সমস্যাটি স্থির হয়েছে কিনা তা দেখার জন্য আমি স্ক্রিপ্টটি পরীক্ষা করেছিলাম তবে এটি এখনও রয়েছে। দুঃখিত, এই ক্ষেত্রে আমার জ্ঞান খুব ন্যূনতম! আমি আমার স্ক্রিপ্টগুলির সংগ্রহকে এগুলি কাজে লাগাতে চেষ্টা করছি কারণ তারা আমার কাজটিকে এতটা সহায়তা করে। সবাইকে ধৈর্যশীল এবং আমার জন্য সহায়ক বলে আপনাকে ধন্যবাদ।
টিফাম

@ টিটিএইচএম, সম্পাদনা দেখুন। যদি এটি কাজ করে তবে অবশ্যই এটি "স্বীকার করুন" এর উত্তরের পাশে চেকমার্কটি ব্যবহার করবেন। (স্বীকার করুন যেটা উত্তর আপনার সমস্যার সমাধান।) Unix.stackexchange.com/help/someone-answers
ওয়াইল্ডকার্ড

1
যে শব্দগুলি হ'ল আদেশগুলি প্রায় সম্পূর্ণ বিরামচিহ্নের চেয়ে রহস্যময় জাগরণের চেয়ে কোনও নবজাতকের কাছে সত্যই বেশি জটিল নয়। এটির জন্য পৃথক উত্তরের প্রয়োজন নেই। এটি কেবল এই জবাবটি উল্লেখ করার প্রয়োজন vimযা এটি দুটি উপায়ে এটি করতে পারে, যার মধ্যে একটি শব্দ ব্যবহার করে। বা, আরও ভাল, এখানে নির্দেশ করা যেখানে এই অধস্তন কার্যটির উত্তর এবং এখানে আরও উত্তর দেওয়া হয়েছে কেবলমাত্র আরম্ভকারীদের জন্য ইউনিক্স.স্ট্যাকেক্সচেঞ্জ / প্রশ্নগুলি / ৮৮৮11 সহ এই পৃষ্ঠার যে কোনও উত্তরের চেয়ে আরও বিশদে ।
জেডিবিপি

1
মনে রাখবেন যে vi -b, \rযাইহোক vim এক্সটেনশন হয়। পজিক্স নয়, এনভি, এলভিস, সোলারিস ভি তে নয় ...
স্টাফেন চেজেলাস

10

এটি কোনও সম্পাদক দ্বারা ডস লাইন-এন্ডিং (যেমন নোটপ্যাড ++ যেমন উদাহরণস্বরূপ) ব্যবহার করে স্ক্রিপ্টটি সংরক্ষণ করার কারণে ঘটে। আপনাকে এগুলি আপনার স্ক্রিপ্টগুলি থেকে সরিয়ে ফেলতে হবে।

এটি করতে, হয় dos2unixস্ক্রিপ্ট ফাইলটিতে ব্যবহার করুন, বা

$ tr -d '\r' <script >script.new && mv script.new script

( এটি স্ক্রিপ্টের যে কোনও জায়গা থেকে সমস্ত গাড়ীর রিটার্ন সরিয়ে ফেলবে )


স্ক্রিপ্টের কোড হিসাবে:

:
iter=1
if [ -f iter.txt ]
   then rm ./iter.txt 
fi  

এটি সম্ভবত কিছু দেখতে হবে

iter=1
if [ -f "./$iter.txt" ]; then
   rm "./$iter.txt"
fi

1.txtএটি বিদ্যমান ডিরেক্টরি থেকে ফাইলটিকে সরিয়ে দেয় if :কমান্ড কিছুই না (প্রায়) এবং সরানো হতে পারে। iterপরিবর্তনশীল এর মান হিসাবে ব্যবহার করা উচিত $iter, এবং উদ্ধৃত করা। এবং তারপরে আমি সম্ভবত ./বর্তমান ডিরেক্টরিটিতে ফাইলটি খুঁজে পাওয়া দরকার বলে এটি ব্যবহার করে প্রয়োজনের তুলনায় আরও স্পষ্ট হয়ে উঠছি ।

আপনি যদি একটি লুপ মধ্যে এটি চালু করার পরিকল্পনা করছেন, তাহলে (এখানে, সব ফাইল মুছে ফেলার 1.txt, 2.txt, ..., 10.txt):

iter=1
while [ "$iter" -le 10 ]; then
    if [ -f "./$iter.txt" ]; then
        rm "./$iter.txt"
    fi
    iter=$(( iter + 1 ))
done

বা, যদি আমরা স্নিগ্ধ / অলস বোধ করি,

rm -f {1..10}.txt

ধনুর্বন্ধনী প্রসার বোঝে এমন শেলগুলিতে।


3
নোটপ্যাড ++ এ উইন্ডোজ / ম্যাক / লিনাক্স লাইন ব্রেকগুলি ব্যবহার করার বিকল্প রয়েছে। আপনাকে কেবল সম্পাদনা মেনুতে যেতে হবে এবং তারপরে EOL রূপান্তর-> ইউনিক্স (এলএফ) যেতে হবে। অথবা আপনি যেখানে ডান নীচে ডানদিকে ডাবল ক্লিক করতে পারেন Windows (CR LF)এবং এটিকে পরিবর্তন করতে পারেনUnix (LF)
jesse_b

আপনার নির্দেশের জন্য সবাইকে ধন্যবাদ। স্পষ্ট করে বলতে চাই: "ইটার = 1" এমন একটি পাল্টা যা আমি পরে আমার মূল উদ্দেশ্যটির জন্য 5 লাইন ছাড়িয়ে ব্যবহার করি
টিপাম

@ টিটিএইচএম আপনাকে স্বাগতম। আমি কেবল বিরক্ত হয়ে গিয়েছিলাম এবং আপনার কোডটি নিয়েছিলাম এবং এটির সাথে আমার মনটি ছাপ ছড়িয়ে দিতে দিন।
Kusalananda

বা rm -f [1-9].txt 10.txt। তবে এটি সম্পূর্ণ যৌক্তিকভাবে সমতুল্য নয়, যেন 1-9-তে কোনও ফাইল নেই তবে এমন একটি ফাইল আছে যা আক্ষরিক অর্থে বলা হয় [1-9].txtতবে এটি মুছে ফেলা হবে। : ডি
ওয়াইল্ডকার্ড

5

আপনার স্ক্রিপ্টগুলির ভুল লাইন-এন্ডিং রয়েছে। উইন্ডোজ সিআর + এলএফ (\ r \ n), ইউনিক্স এলএফ (\ n) ব্যবহার করে এবং ক্লাসিক ম্যাকোস সিআর (\ r) ব্যবহার করে। কোনও পাঠ্য সম্পাদক বা একটি স্বতন্ত্র সরঞ্জামের মতো, আপনাকে সমস্ত আক্রান্ত ফাইলের লাইন-এন্ডিংগুলি পরিবর্তন করতে হবে dos2unix

এসভিএন এর মতো এফটিপি এবং সংস্করণ নিয়ন্ত্রণ সিস্টেমগুলি লাইনের শেষগুলি যথাযথভাবে রূপান্তর করতে সক্ষম হতে পারে, তাই ভবিষ্যতে ফাইল স্থানান্তর করার জন্য আপনি সেই বিকল্পগুলি সন্ধান করতে চাইতে পারেন।

যদি এই ফাইলগুলি স্থানান্তর করা হচ্ছে না , তবে কেবলমাত্র একটি একক মেশিনে ব্যবহৃত হয়, তবে আপনি আপনার পছন্দসই পাঠ্য সম্পাদকটিতে লাইন শেষের জন্য সেটিংস সন্ধান করতে চাইবেন। "প্রোগ্রামারদের জন্য" হিসাবে বিজ্ঞাপন দেওয়া বেশিরভাগের কাছে এই জাতীয় বিকল্প থাকবে।


আপনার সহায়ক নির্দেশের জন্য সবাইকে ধন্যবাদ। আমি মাত্র ডস 2 ইউনিক্স চেষ্টা করেছিলাম তবে মনে হয় এটি আমার নেই। আবার অনুসন্ধান এবং চেষ্টা করবে।
টিফাম

3

পরিপূরক উত্তর হিসাবে আমাকে কয়েকটি নোট / টিপস যুক্ত করতে দিন ...

প্রথমে, নিয়মিত পাঠ্য ফাইলগুলির জন্য আপনি অনন্যা ব্যবহার করে ইউনিক্স বা ডস লাইন শেষ করে কিনা তা সহজেই নির্ধারণ করতে পারেন file। উদাহরণ স্বরূপ:

$ file test.txt
test.txt: ASCII text, with CRLF line terminators
$ dos2unix test.txt
dos2unix: converting file test.txt to Unix format...
$ file test.txt
test.txt: ASCII text

আমার ব্যবহার নোট করুন dos2unix। আমি আপনাকে এটি ইনস্টল করার অত্যন্ত পরামর্শ দিচ্ছি। আপনি কীভাবে সাইগউইন ব্যবহার করছেন তার উপর নির্ভর করে আপনার প্রায়শই পর্যাপ্ত এই রূপান্তরটি করার দরকার হতে পারে যে সুবিধাটি স্বাগত। আরও গুরুত্বপূর্ণটি হ'ল এখানে আলোচিত ম্যানুয়াল সম্পাদনাগুলির মতো ত্রুটির কোনও সম্ভাবনা নেই।

মূল সাইগউইনকে নির্বাহযোগ্য install সেটআপ-x86_64.exe বা সেই লাইনের পাশাপাশি কিছু এমন নামের সাথে এটিই with নিশ্চিত হয়ে নিন যে আপনি এর মতো একটি পর্দা দেখেছেন:

এখানে চিত্র বর্ণনা লিখুন

যেহেতু আপনি ইতিমধ্যে প্রাথমিক ইনস্টলটি সম্পন্ন করেছেন আপনার নির্বাচনের স্ক্রিন না পাওয়া পর্যন্ত আপনার সর্বদা Next ক্লিক করতে সক্ষম হওয়া উচিত । ড্রপডাউনতে পূর্ণ নির্বাচন করুন এবং অনুসন্ধান বাক্সে "ডস 2" লিখুন এবং এখানে প্রদর্শিত হিসাবে সরঞ্জামটি চয়ন করুন:

এখানে চিত্র বর্ণনা লিখুন

তারপর ক্লিক পরবর্তী আবার এবং ইনস্টলেশন সম্পূর্ণ করা যাক। এটাই. আনন্দ কর. সাইগউইন, মাঝে মাঝে এই অসুবিধা বাদ দিয়ে একটি দুর্দান্ত প্যাকেজ।


আপনার বি বি স্তরের নির্দেশের জন্য আপনাকে অনেক ধন্যবাদ! এই স্ট্যাক এক্সচেঞ্জ গ্রুপটি এত সহায়ক। আমি এই সমর্থন সত্যই প্রশংসা করি।
টিফাম

1

ডস 2 ইউনিক্স না হলে 'ফ্লিপ'ও রয়েছে

$ ফ্লিপ -u yourfilename.txt

এটি ইউনিক্স লাইনের শেষগুলি ব্যবহার করে ফ্লিপ করবে।


1

আমি উইনসিসিপি দ্বারা সার্ভারের সাথে সংযুক্ত হয়ে আমার বাশ (.sh) স্ক্রিপ্টগুলি সম্পাদনা করতে নোটপ্যাড ++ ব্যবহার করি ( নোটপ্যাড ++ এ উইনসিসিপি সম্পাদক সেটআপ করতে: https://winscp.net/eng/docs/ui_editor_preferences )

সার্ভার থেকে ফাইলগুলি " Vim " সম্পাদকের পরিবর্তে সম্পাদনা / সংরক্ষণের জন্য খোলার পক্ষে এটি খুব ব্যবহারিক ।
আপনি নোটপ্যাড ++ এ ফাইলটি খুললে নীচের স্থিতি বারে 7 তম কলামটিতে ডাবল ক্লিক করুন এবং " ইউনিক্স (এলএফ) " নির্বাচন করুন ।

এখানে চিত্র বর্ণনা লিখুন

এছাড়াও, আপনাকে শীর্ষ বারে ইউটিএফ -8 এ এনকোডিং -> এনকোড দ্বারা অষ্টম এক পরিবর্তন করতে হবে।


0

সাইগউইনের বাশ আনন্দের সাথে ম্যাক এবং উইন্ডোজ-এর-শেষ-লাইন এনকোডিংয়ের সাথে কাজ করার জন্য আপনাকে আসল ফাইলের লাইন এনকোডিংটি পরিবর্তন করার দরকার নেই। একটি বিকল্প রয়েছে যা আপনাকে কেবল ফ্লিপ করতে হবে।

এটি কেবল ~/.bash_profileতাই আপনার আপডেট করুন

export SHELLOPTS
set -o igncr

Https://ptolemy.berkeley.edu/projects/chess/softdevel/faq/5.html দেখুন

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