এখানে ফাইলটি ব্যবহার করুন এবং কমান্ডের পুনর্নির্দেশ করুন


11

আমার একটি ব্যাচের স্ক্রিপ্টে নিম্নলিখিত কোড রয়েছে:

mpirun -np 6 ./laplace <<END
100
100
100
0.01
100
3
2
1
END
| tail -n 1 > output

কিন্তু এটি কাজ করছে না। আমি এটি যা করতে চাই তা হ'ল এমপিআরুন কমান্ডের ইনপুট হিসাবে এখানে ফাইলটি ব্যবহার করুন এবং তারপরে আউটপুটটি টেল কমান্ডে পাইপ করুন। তবে আমি মনে করি যে এখানে ফাইল এবং লেজ আউটপুট জিনিসগুলি বিভ্রান্ত হচ্ছে।

আমি এটি কীভাবে লিখব যাতে এটি আমার যা ইচ্ছা তা করে?

উত্তর:


12

আপনি প্রথম লাইনে যা লিখেছেন তা শেল টার্মিনোলজিতে একটি সম্পূর্ণ কমান্ড ("(যৌগিক) তালিকা" এর মতো দেখায়, তাই শেল এটি সম্পূর্ণ কমান্ড হিসাবে বিবেচনা করে। যেহেতু এখানে একটি নথির সূচনা চিহ্নিতকারী ( <<END) রয়েছে তাই শেলটি এখানে ডকুমেন্টের সামগ্রীগুলি পড়ে এবং তারপরে একটি নতুন কমান্ড শুরু করে। আপনি যদি এখানে-নথিটি কোনও তালিকার মাঝখানে রাখতে চান, আপনাকে শেলটি নির্দেশ করতে হবে যে তালিকাটি শেষ হয়নি। এখানে বেশ কয়েকটি উপায় রয়েছে।

mpirun -np 6 ./laplace <<END |

END
tail -n 1 > output
{ mpirun -np 6 ./laplace <<END

END
} | tail -n 1 > output

অথবা, অবশ্যই, আপনি নিশ্চিত করতে পারেন যে কমান্ডটি প্রথম লাইনে পুরোপুরি ফিট করে।

mpirun -np 6 ./laplace <<END | tail -n 1 > output

END

মনে রাখার নিয়মটি হ'ল এখানে-নথির বিষয়বস্তু <<ENDসূচকের পরে প্রথম অব্যক্ত নতুন লাইনের পরে শুরু হয় । উদাহরণস্বরূপ, এই স্ক্রিপ্টটি লেখার আরও একটি অবরুদ্ধ উপায়:

mpirun -np 6 ./laplace <<END \
| tail -n $(

END
             echo 1) > output

শেষটা! "অবহেলা" .. আপনি মজা করছেন না! :) .. আমি কঠোর-নতুন ধারণাটি পেরিয়ে গিয়েছি, কিন্তু বাস্তবে যেমন একটি বন্ধনী ব্লকটি বিসারেতে শিরোনাম হয় তখন .. এটি কি ডিজাইনের দ্বারা, বা এটি কোনও কাকতালীয় অভ্যাস ?. (উদাহরণস্বরূপ, এর সত্যিকারের কোনও ব্যবহার আছে? ... এবং আপনি সেই প্রথম "নরম" লাইনে একাধিক আধা-কোলন পৃথক
কমান্ডও দিতে পারেন

@ ফ্রেড: কেবল একটি কাকতালীয় বিপর্যয়। হেরডোকটি কোথায় শুরু হয় এবং কোথায় থামে সে সম্পর্কে কিছু নিয়ম থাকতে হবে। এখানে নিয়মটি হ'ল হেরডোকটি <<ENDবিট পরবর্তী পরবর্তী লাইন টোকেনের সাথে সংযুক্ত একক টোকেনের মতো । একটি ব্যাকস্ল্যাশ-নিউলাইন নতুন লাইনটি বাতিল করে।
গিলস 'অসন্তুষ্ট হওয়া বন্ধ করুন' ২

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