টার্মিনাল লাইন ইনপুট শেষ করার জন্য Ctrl + D


21

যদি আমি করি

$ cat > file.txt

টেক্সট Ctrl- DCtrl-D

প্রশ্ন 1: আমি যদি এন্টার টিপুন না, কেন আমি প্রেস করতে হবে Ctrl- Dদুইবার?

যদি আমি করি

$ cat > file.txt

পাম বম pshhh Ctrl-Z

[2]+  Stopped         cat > file.txt
$ cat file.txt
$ cat > file.txt

পা বাম pshhh

Ctrl-Z

[2]+  Stopped         cat > file.txt
$ cat file.txt
pa bam pshhh

দ্বিতীয় বার 1 লাইনের সাথে ফাইলটি কেন?


2
: Stackexchange সাইট অধীনে এই থ্রেড ছাতা উত্তর দিকে তাকিয়ে আছেন তার আছে stackoverflow.com/questions/7369170/... । আশা করি এটা সাহায্য করবে.

হ্যাঁ, যদিও পাইথন সম্পর্কিত নয়, আমার প্রশ্নটি সদৃশ।
কুয়াশা

আপনি যখন সিটিআরএল-জেড টাইপ করেন, আপনি কি সত্যিই কেবল একটি নতুন শেল প্রম্পট পাচ্ছেন, বা আপনি কি catবন্ধ হওয়ার বিষয়ে বার্তা পাচ্ছেন ?
মার্ক প্লটনিক

আমি প্রশ্নটি আপডেট করব
ধূলি

উত্তর:


30

ইউনিক্সে, বেশিরভাগ অবজেক্টস আপনি পড়তে এবং লিখতে পারবেন - সাধারণ ফাইল, পাইপ, টার্মিনাল, কাঁচা ডিস্ক ড্রাইভ - সবই ফাইলের অনুরূপ হিসাবে তৈরি to

এর মতো একটি আদর্শ প্রোগ্রাম catএর স্ট্যান্ডার্ড ইনপুট থেকে এটি পড়ে:

n = read(0, buffer, 512);

যা 512 বাইটের জন্য জিজ্ঞাসা করে। nআসলে পড়া বাইটের সংখ্যা বা কোনও ত্রুটি থাকলে -1 হয়।

আপনি যদি কোনও সাধারণ ফাইল দিয়ে বারবার এটি করেন, আপনি 512-বাইট পঠনগুলির একটি গুচ্ছ পাবেন, তারপরে ফাইলটির লেজ প্রান্তে কিছুটা সংক্ষিপ্ত পড়তে হবে, তারপরে 0 আপনি যদি ফাইলটির শেষটি পড়ার চেষ্টা করেছিলেন। সুতরাং, <= 0 catঅবধি চলবে n

টার্মিনাল থেকে পড়া কিছুটা আলাদা। আপনি একটি লাইন টাইপ করার পরে, Enterকী দ্বারা সমাপ্ত হয়ে , readঠিক সেই লাইনে ফিরে আসে।

আপনি টাইপ করতে পারেন এমন কয়েকটি বিশেষ অক্ষর রয়েছে। এক Ctrl-D। আপনি যখন এটি টাইপ করেন, অপারেটিং সিস্টেমটি আপনার টাইপ করা সমস্ত বর্তমান লাইনের পাঠায় (যা Ctrl-Dনিজে নয়) পাঠায় । এবং এখানে Serendipitous জিনিসটি Ctrl-Dহ'ল : লাইনটির প্রথম অক্ষরটি হলে প্রোগ্রামটিকে দৈর্ঘ্যের 0 টি লাইন প্রেরণ করা হয় - ঠিক ঠিক তেমন প্রোগ্রামটি দেখতে পাবে যে এটি কোনও সাধারণ ফাইলের শেষে এসে গেছে কিনা। এটি কোনও সাধারণ ফাইল বা টার্মিনাল থেকে পড়া হোক না কেন, cat আলাদাভাবে কিছু করার দরকার নেই

আর একটি বিশেষ চরিত্র Ctrl-Z। আপনি যখন এটি লাইনের যে কোনও জায়গায় টাইপ করেন, অপারেটিং সিস্টেম সেই পয়েন্ট অবধি আপনার টাইপ করা যা কিছু তা বাতিল করে দেয় এবং প্রোগ্রামে একটি SIGTSTP সিগন্যাল প্রেরণ করে, যা সাধারণত এটি থামায় (বিরতি দেয়) এবং শেলের নিয়ন্ত্রণ ফিরে দেয়।

সুতরাং আপনার উদাহরণে

$ cat > file.txt
pa bam pshhh<Ctrl+Z>
[2]+  Stopped         cat > file.txt

আপনি কিছু অক্ষর টাইপ করেছেন যা ফেলে দেওয়া হয়েছিল, তারপরে catতার আউটপুট ফাইলে কিছু না লিখেই থামিয়ে দেওয়া হয়েছিল।

$ cat > file.txt
pa bam pshhh
<Ctrl+Z>
[2]+  Stopped         cat > file.txt

আপনি একটি লাইনে টাইপ করেছেন, যা catএর আউটপুট ফাইলটিতে পড়ে এবং লিখেছিল এবং তারপরে Ctrl-Zবন্ধ হয়ে গেছে cat


1
এই বিষয়গুলি কেবলমাত্র মোড টার্মিনালের ক্ষেত্রেই সত্য । এমনকি সেই ক্ষেত্রেও তাদের পরিবর্তন করা যেতে পারে।
মাইকজার্ভ

পছন্দ করেছেন এখানে, আমি ওপি কী দেখছে তা বোঝাতে চেয়েছিলাম। আমি কাঁচা / -আইকানন টার্মিনাল মোড, অন্যান্য বিশেষ অক্ষরগুলি কীভাবে তাদের অনুকূলিতকরণ করতে পারি, ওএস দ্বারা কীভাবে তারা পৃথক হতে পারি ইত্যাদি বর্ণনা করার কথা বিবেচনা করেছি কিন্তু উত্তরটি অত্যধিক দীর্ঘ করতে চাইনি।
মার্ক প্লটনিক

উপরেরটি কি বোঝায় যে ইনপুটটি যদি না চলত cat, যে প্রোগ্রামটি যা কীবোর্ড থেকে ডেটা পড়ে এবং প্রথমবারের জন্য readশূন্য পাওয়া যায় নি, তা চালিয়ে যেতে পারে, এবং নিয়ন্ত্রণ-ডি এর প্রয়োজনীয় সংখ্যার দ্বারা নির্ধারিত হবে প্রোগ্রামটি নির্ধারণের জন্য ক্রমাগত সংখ্যাটি কতগুলি শূন্য ছিল?
সুপারক্যাট

@ সুপের্যাট একটি প্রোগ্রাম চাইলে পড়া চালিয়ে যেতে পারে। ইন exসম্পাদক, আপনি একটি লাইনের প্রথম অক্ষর, প্রোগ্রাম বদলে থেকে প্রস্থান কয়েক লাইন সম্পাদক শো আপনি একটি নিয়ন্ত্রণ-ডি টাইপ করে। (ইন exএবং vi, কন্ট্রোল-ডি "ডাউন" এর জন্য একটি স্মৃতিচারণমূলক বিষয়)। এবং অনেকগুলি শেল দিয়ে আপনি যদি কন্ট্রোল-ডি টাইপ করেন তবে ব্যাকগ্রাউন্ডে কাজ চলছে তবে শেলটি আপনাকে প্রস্থান করার পরিবর্তে এটি সম্পর্কে অবহিত করবে, তবে আপনি যদি আবার কন্ট্রোল-ডি টাইপ করেন তবে শেলটি সিদ্ধান্ত নিয়েছে যে আপনি যেভাবেই হোক বাইরে যেতে চান এবং তাই কি হবে.
মার্ক প্লটনিক

@ মার্কপ্লটনিক: এই জিরো-বাইট হিচাপ পাইপের মাধ্যমে পাঠানো যেতে পারে এমন কোন উপায় আছে কি?
সুপারক্যাট

19

এটি কারণ Ctrl+ Dএকটি হ্যাক।

গভীরভাবে ডাউন, Ctrl+ D( eofচরিত্র বলা সত্ত্বেও ) আসলে ফাইলের শেষের অর্থ নয়: এর অর্থ হল "মুলতুবি থাকা ইনপুটটি এখনই অ্যাপ্লিকেশনটিতে প্রেরণ করুন"। এটি আসলে Ctrl+ M( eol) এর অর্থের নিকটে , যা মুলতুবি ইনপুট প্লাস একটি নতুন লাইন প্রেরণ করে।

যখন আপনি টিপুন Ctrl+ + Dঅবিলম্বে পরে Ctrl+ + M(অর্থাত একটি লাইন শুরুতে) অথবা একের পর Ctrl+ + D, মুলতুবি ইনপুট খালি। সুতরাং অ্যাপ্লিকেশনটি 0 বাইট ইনপুট গ্রহণ করে। একটি readকলে, 0 বাইট পড়া ফাইলের শেষের ইঙ্গিত দেয়।


আপনি যখন Ctrl+ টিপুন Z, মুলতুবি ইনপুট বাতিল করা হবে। সুতরাং কেবলমাত্র catনতুন লাইন প্রবেশ করে বা Ctrl+ টিপানোর Dআগে Ctrl+ Zপ্রক্রিয়াকরণ হওয়ার পরে কেবল অ্যাপ্লিকেশনটিতে (যা হ'ল ) ইতিমধ্যে প্রেরণ করা হয়েছিল প্রক্রিয়াজাত করা হবে।


1
গিলের একটি উত্তর থেকে সিটিআরএল + ডি সম্পর্কিত আরও তথ্য এখানে পাওয়া যাবে
রমেশ

যেমনটি আপনি বলেছেন, Ctrl-D এর অর্থ ফাইল-এর শেষ নেই। প্রকৃত কারণে এটির অর্থ এই নয় যে Ctrl-D হ'ল EOT (পাঠ্যের শেষে)।
H2ONaCl
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.