ইকো কমান্ড এবং পুনঃনির্দেশ অপারেটরটি ব্যবহার করে কোনও ফাইলগুলিতে একটি নিউলাইন বিশেষ অক্ষর কীভাবে রাখবেন?


29

আমি ইকো কমান্ড এবং পুনঃনির্দেশ অপারেটর ব্যবহার করে একটি ফাইল তৈরি করতে চাই, ফাইলটি কয়েকটি লাইন দিয়ে তৈরি করা উচিত।

আমি স্ট্রিংয়ের ভিতরে "\ n" দ্বারা একটি নতুন লাইন অন্তর্ভুক্ত করার চেষ্টা করেছি:

echo "first line\nsecond line\nthirdline\n" > foo

তবে এই ভাবে তিনটি লাইনযুক্ত কোনও ফাইল তৈরি করা হয়নি তবে কেবল একটি লাইনের একটি ফাইল এবং স্ট্রিংয়ের ভারব্যাটিম সামগ্রী।

আমি কীভাবে কেবল এই আদেশটি ব্যবহার করে বেশ কয়েকটি লাইনের একটি ফাইল তৈরি করতে পারি?


উত্তর:


30

আপনি echoকমান্ডটি দিয়ে কিছু বাক্য গঠন ব্যবহার করার জন্য বলেছেন :

echo $'first line\nsecond line\nthirdline' > foo

(তবে আপনি যে উত্তর পেয়েছেন সেগুলিও বিবেচনা করুন))

$'...'কনস্ট্রাক্ট বিস্তৃতি এমবেডেড ANSI পালাবার ক্রম।


1
মনে রাখবেন যে এটি পসিক্স নয়, মূলত এটি উপলব্ধ কিনা তা আপনি কী শেল ব্যবহার করছেন তার উপর নির্ভর করে।
ক্রিস ডাউন

1
আপনি এটি বিশিষ্ট শাঁস (কমপক্ষে), কেএসএইচ, বাশ, জেডএস (এবং সম্ভবত অন্যদের মধ্যে) নির্মাণ করতে পারেন।
জেনিস

1
@ ক্রিসডাউন, এটি এখনও পসিক্স নয়, তবে ৮ ইস্যুতে অন্তর্ভুক্তির জন্য নির্ধারিত হয়েছে।
স্টাফেন চেজেলাস

24

অক্ষর পলায়নের সাথে প্রতিধ্বনি যা করেন তা বাস্তবায়ন সংজ্ঞায়িত হয়। প্রতিধ্বনির অনেক বাস্তবায়নে (বেশিরভাগ আধুনিক আধুনিক সহ), পাস করা স্ট্রিংটি ডিফল্টরূপে পালিয়ে যাওয়ার জন্য পরীক্ষা করা হয় না।

জিএনইউ বাশ (বিল্টিন হিসাবে) এবং অন্য কিছু প্রতিধ্বনি বৈকল্পিক সরবরাহিত প্রতিধ্বনির সাহায্যে আপনি নিম্নলিখিতগুলির মতো কিছু করতে পারেন:

echo -en 'first line\nsecond line\nthird line\n' > file

তবে, আপনি printfযা চান তা সত্যিই শোনাচ্ছে যা আমার চোখের কাছে আরও সুগঠিত এবং আরও বহনযোগ্য (এটি পসিক্স দ্বারা নির্ধারিত বৈশিষ্ট্যযুক্ত):

printf '%s\n' 'first line' 'second line' 'third line' > file

আপনি এখানে একটি দলিল ব্যবহার বিবেচনা করতে পারেন :

cat > file << 'EOF'
first line
second line
third line
EOF

আমি শেলটিতে আপনার বিড়াল> ফাইলটি << 'ইওএফ' চেষ্টা করেছিলাম, যখন আমি এন্টার প্রবেশ করি, আমি প্রতিটি লাইনের সাথে এই> আকৃতির প্রম্পট পেয়েছি, তবে আমি সিটিআরএল + এক্স বা সিআরটিএল + জিট আঘাত করেও এ থেকে বেরিয়ে যেতে পারিনি
আব্দুল আল Hazred

আপনাকে একটি ইনপুট লাইনে একা
ইওএফ

2
@ মিমক্জারভেজ আপনি কি সুন্দরী বা গুরুতর হয়ে উঠছেন?
ম্যাথিউ

1
উত্তরের লিঙ্কটি হিসাবে আব্দুলআলহ্যাজার্ডকে ইঙ্গিত করা হয়েছে, এটিকে একটি "এখানে নথি" বলা হয় এবং এটি খুব সাধারণ। উইকিপিডিয়া এই বিষয়টিতে ভাল: en.wikedia.org/wiki/Here_docament
dave_thompson_085 22:58

1
এই জন্য আমার ম্যাক ওএসএক্স (বিশেষভাবে কাজ echo -en 'text..', যেহেতু গৃহীত উত্তর আমার newline অক্ষর (সনাক্ত করা যায় নি \n), echo -enকরেনি।
benjaminmgross

4

echoকমান্ডটি ব্যবহার করে মাল্টি-লাইন ফাইল তৈরি করার জন্য এখানে আরও কিছু উপায় রয়েছে :

echo "first line"  >  foo
echo "second line" >> foo
echo "third line"  >> foo

যেখানে দ্বিতীয় এবং তৃতীয় কমান্ডগুলি >>পুনঃনির্দেশ অপারেটর ব্যবহার করে , যার ফলে কমান্ডের আউটপুট ফাইলের সাথে যুক্ত (যুক্ত) হয়ে যায় (যা ইতিমধ্যে এই পয়েন্টের দ্বারা উপস্থিত থাকা উচিত)।

অথবা

(echo "first line"; echo "second line"; echo "third line") > foo

যেখানে প্রথম বন্ধনীগুলি echoএকটি উপ-প্রক্রিয়াতে কমান্ডগুলি গোষ্ঠীভুক্ত করে , যা একক প্রোগ্রামের মতো দেখতে এবং কাজ করে যা একাধিক লাইনকে আউটপুট করে (যেমন ls, উদাহরণস্বরূপ)।

উপরের উপর একটি সূক্ষ্ম প্রকরণ হয়

{ echo "first line"; echo "second line"; echo "third line";} > foo

এটি দ্বিতীয় উত্তরের চেয়ে কিছুটা বেশি দক্ষ যে এটি একটি উপ-প্রক্রিয়া তৈরি করে না। তবে সিনট্যাক্সটি কিছুটা কৌতুকপূর্ণ: নোট করুন যে আপনার অবশ্যই অবশ্যই এর পরে একটি স্থান {এবং একটি সেমিকোলন অবশ্যই }

দেখুন শেলের নিয়ন্ত্রণ এবং পুনঃনির্দেশ অপারেটরগুলি কী কী? আরও তথ্যের জন্য.


2

আরও একটি বিকল্প দিতে, আপনি কেবল আঘাত করতে পারেন Enter (অর্থাত্ আক্ষরিক নতুন লাইন):

$ echo "the rain in spain
> falls mainly on the plain" > foo

নোট করুন যে আপনি >দ্বিতীয় লাইনের শুরুতে টাইপ করবেন না । এটি সেকেন্ডারি শেল প্রম্পট, $PS2যা শেলটি প্রিন্ট করে আপনি যখন অসম্পূর্ণ কমান্ডটি টাইপ করেন (উদাহরণস্বরূপ, এই ক্ষেত্রে, একটি মিল নেই যা একটি মিল নেই)।


0

পজিক্স 7 বলে যে আপনি পারবেন না

http://pubs.opengroup.org/onlinepubs/9699919799/utilities/echo.html

-e সংজ্ঞায়িত হয় না এবং ব্যাকস্ল্যাশগুলি বাস্তবায়ন সংজ্ঞায়িত হয়:

যদি প্রথম অপারেন্ডটি -n হয়, বা যদি কোনও অপারেন্ডে <ব্যাকস্ল্যাশ> অক্ষর থাকে তবে ফলাফলগুলি বাস্তবায়ন-সংজ্ঞায়িত হয়।

আপনার যদি কোনও Xচ্ছিক এক্সএসআই এক্সটেনশন না থাকে।

printfপরিবর্তে ব্যবহার করুন:

XBD ফাইল ফর্ম্যাট নোটেশন বর্ণিত বিন্যাস স্ট্রিং হিসাবে ফর্ম্যাট অপারেন্ড ব্যবহার করা হবে [...]

ফাইল ফর্ম্যাট স্বরলিপি :

। n <নিউলাইন> মুদ্রণ অবস্থানটি পরবর্তী লাইনের শুরুতে সরান।

এছাড়াও মনে রাখবেন যে উবুন্টু 15.10 এবং বেশিরভাগ ডিস্ট্রো echoউভয় হিসাবে প্রয়োগ করে:

  • একটি বাশ অন্তর্নির্মিত: help echo
  • একক নির্বাহযোগ্য: which echo

যা কিছু বিভ্রান্তির কারণ হতে পারে।


echoসিস্টেমে উপলব্ধ প্রতিটি শেলের মধ্যে একটি বিল্টিন থাকবে । উবুন্টু / বিন / শ-এ সাধারণত ড্যাশ থাকে, বাশও ডিফল্টরূপে আসে। zsh, rc, mksh, yash, csh, tcsh, ksh93 ... সবার নিজস্ব আচরণ থাকবে আলাদা আচরণের সাথে। নোট যেটি which echoআপনাকে সমস্ত শেলগুলিতে সিস্টেমের প্রতিধ্বনি দেবে না।
স্টাফেন চেজেলাস

@ স্টাফেনচাজেলাস "যা প্রতিধ্বনি আপনাকে সমস্ত শেলগুলিতে সিস্টেম প্রতিধ্বনির পথ দেয় না।" যা আমি জানতাম না, এ আর কী দিতে পারে?
সিরো সান্তিলি 事件 改造 中心 法轮功 六四

Tcsh বা zsh এ চেষ্টা করুন। whichমূলত (৮০ এর দশকে) কেবল সিএসএস ব্যবহারকারীদের জন্য একটি সিএসপি স্ক্রিপ্ট ছিল (~ / .cshrc থেকে এলিয়াসগুলি লোড করা হয়েছিল) এবং এখনও কিছু সিস্টেমে রয়েছে। whichzsh এবং tcsh এ একটি বিল্টিন।
স্টাফেন চেজেলাস
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.