এলএস থেকে আউটপুট নতুন লাইনে আছে তবে একক লাইনে প্রদর্শন করে। কেন?


41

আমি মনে করি শেল সম্পর্কিত আমি তুলনামূলকভাবে মৌলিক বিষয়টিকে উপেক্ষা করছি। ডিফল্টরূপে ls কমান্ড থেকে আউটপুট নতুন লাইনের সাথে আউটপুট পৃথক করে, তবে শেল আউটপুটটি একক লাইনে প্রদর্শন করে।

কেউ কি আমাকে এই ব্যাখ্যা করতে পারেন? আমি সবসময় ধরেই রেখেছিলাম যে আউটপুটটি কেবল ফাঁকা জায়গাগুলির দ্বারা পৃথক করা হয়েছিল, তবে এখন আমি আউটপুটটিকে নতুন লাইনের দ্বারা পৃথক করে দেখছি, আমি আশা করব আউটপুটটি পৃথক লাইনে প্রদর্শিত হবে ing

উদাহরণ:

cpoweradm@debian:~/lpi103-4$ ls text*
text1  text2  text3

od প্রদর্শন করে যে আউটপুটটি নিউলাইনগুলি দ্বারা পৃথক করা হয়েছে:

cpoweradm@debian:~/lpi103-4$ ls text* | od -c
0000000   t   e   x   t   1  \n   t   e   x   t   2  \n   t   e   x   t
0000020   3  \n
0000022

যদি নিউলাইনগুলি উপস্থিত থাকে তবে আউটপুট কেন প্রদর্শিত হবে না:

text1 
text2
text3

উত্তর:


44

আপনি যখন আউটপুটটি পাইপ করেন, তখন lsভিন্নভাবে কাজ করে।

এই তথ্যটি তথ্য ডকুমেন্টেশনে লুকিয়ে রয়েছে :

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

এটি প্রমাণ করতে, চালানোর চেষ্টা করুন

ls

এবং তারপর

ls | less

এর অর্থ হ'ল যদি আপনি আউটপুটটি প্রতি লাইনে একটি ফাইল হওয়ার নিশ্চয়তা দিতে চান তবে তা পাইপ করা বা পুনঃনির্দেশিত করা হচ্ছে না, আপনাকে চালনা করতে হবে

ls -1

( -1এক নম্বর)

বা, আপনি ls | lessচালিয়ে কলামগুলিতে আউটপুট করতে বাধ্য করতে পারেন

ls -C

( -Cএকটি মূলধন সি)


6
@theconnorpower: এটি প্রায় কাছাকাছি নির্দিষ্ট ls। এটি দরকারী, তবে এটি স্পষ্টতই বেমানান এবং অবাক করা। তবে নোট করুন যে রঙিন আউটপুট উত্পাদনকারী কয়েকটি কমান্ডগুলি পাইপ করার সময় রঙগুলি ছিটকে দেবে।
মাইকেল

5
@ থেকননারপাওয়ার: ট্রিভিয়া: ইউনিক্সের উদ্ভাবকরা প্ল্যান 9 লিখেছেন। প্ল্যান 9-এ lsসর্বদা প্রতি লাইনে একটি মুদ্রণ করে এবং lcসর্বদা কলামগুলিতে মুদ্রণ করে।
মাইকেল

2
@ থেকননারপাওয়ার: এখানে এমন কিছু প্রোগ্রাম রয়েছে যা টার্মিনালের আকার পড়বে এবং সে অনুযায়ী তাদের আউটপুট সামঞ্জস্য করবে, উদাহরণস্বরূপ দেবিয়ান dpkg -lস্ক্রিনের পুরো প্রস্থ ব্যবহার করবে, তবে যদি এটি কোনও পাইপে মুদ্রণ করা হয়, তবে এটি ধরে নেয় টার্মিনালটি 80 টি কলাম প্রশস্ত , এবং আউটপুট সংক্ষিপ্ত বিবরণ প্রয়োজন হলে এটি ফিট করতে।
মাইকেল

1
@ মাইকেল প্ল্যান 9 এর মধ্যে এলএস / এলসি পার্থক্য শুনতে আগ্রহী। বিস্তারিত উত্তর দেওয়ার জন্য ধন্যবাদ।
zod90

1
কোনও প্রোগ্রাম কীভাবে এটি নির্ধারণ করতে পারে যদি তার আউটপুট কোনও ফাইলে পুনর্নির্দেশ করা হয় বা এটি কোনও শেলের দিকে যাচ্ছে কিনা?
ব্যবহারকারী 2820379

4

আপনার আবিষ্কারের আউটপুট বিশিষ্ট করা কেন lsসর্বদা একটি খারাপ ধারণা হবার প্রাথমিক কারণটি হাইলাইট করে । পূর্ণ ব্যাখ্যার জন্য গ্রেগের উইকি দেখুন ।

বিপরীতে আপনার সমস্যা সম্পর্কে চিন্তা করুন। আপনি লক্ষ্য করেছেন যে ls কখনও কখনও এটি করে এবং কখনও কখনও এর আউটপুটটির মধ্যে নতুন লাইনগুলি প্রিন্ট করে না। স্ক্রিপ্টগুলিতে ব্যবহারের জন্য বা যখন -1পতাকা দ্বারা বাধ্য করা হয় , এটি করে। প্রতিটি ফাইলের শেষে একটি নতুন লাইন। প্রতিটি নিউলাইন একটি নতুন ফাইলের নাম উপস্থাপন করে এমন কোন গ্যারান্টি নেই । প্রকৃতপক্ষে, যদি কোনও ফাইলনামে নিজেই একটি নতুন লাইন থাকে, তবে ls এর আউটপুট সম্পূর্ণরূপে আন-পার্সেবল হবে। এই ফাইলের নামগুলি বিবেচনা করুন:

file1
file2\nfile3
file4

আপনি যখন ls -1এটির সাথে একটি ডিরেক্টরি রাখেন তখন আপনি এমন দেখতে পাবেন যা দেখতে এমন দেখাচ্ছে:

file1
file2
file3
file4

আপনি কি প্রাকৃতিকভাবে চারটি ফাইল অনুমান করবেন না? সুতরাং কোনও স্ক্রিপ্ট যে ls এর আউটপুট পার্স করবে। বাস্তবে তিনটি ফাইল রয়েছে যার মধ্যে একটি ছদ্মবেশী নাম রয়েছে, তবে আপনি ls এর আউটপুট থেকে এটি বের করতে পারবেন না *

* আপনি যদি -lপতাকাটি ব্যবহার না করে এবং আউটপুটটি উদ্বিগ্ন হয়ে না দেখেন তবে আপনার স্ক্রিপ্টগুলি এখনও শ্বাসরোধ করবে।


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