বাছাই-কেন দরকারী?


32

ইউনিক্স দর্শন বলেছেন: একটি কাজ করুন এবং এটি ভাল করুন। এমন প্রোগ্রাম তৈরি করুন যা পাঠ্য পরিচালনা করে, কারণ এটি সর্বজনীন ইন্টারফেস।

sortকমান্ড, অন্তত গনুহ সাজানোর এ, একটি হয়েছে -oপরিবর্তে একটি ফাইলে আউটপুট বিকল্প stdoutsort foobar -o whateverযখন আমি ঠিক করতে পারি তখন কেন বলুন, দরকারী sort foobar > whatever?


3
জিএনইউ ইউনিক্স নয়। অনেক ক্ষেত্রে এটি পৃথক, উদাহরণস্বরূপ ভার্বোস যুক্তি (- সহায়তা, ইত্যাদি)।
সাকিস্ক

@ যদি হ্যাঁ এটি সত্য । তবে আমি যুক্তি দিয়ে বলব যে এটি এই নির্দিষ্ট প্রশ্নের কোনও উত্তর নয়।
strugee

2
সে কারণেই আমি এটিকে একটি মন্তব্য হিসাবে রেখেছি এবং উত্তর নয় :)
সাকিস্ক

উত্তর:


47

এটি কেবল জিএনইউ বাছাই নয় এটি রয়েছে। বিএসডি সাজানোর এটিও রয়েছে। আর কেন?
(আমি ভেবেছিলাম এটিও একটি ভাল প্রশ্ন ...)

ম্যান পেজ থেকে: "প্রদত্ত আর্গুমেন্টটি আউটপুট ফাইলের নাম যা স্ট্যান্ডার্ড আউটপুটের পরিবর্তে ব্যবহার করা হবে। এই ফাইলটি ইনপুট ফাইলগুলির মধ্যে একটির মতো হতে পারে" "

আপনি পুনঃনির্দেশ সহ একই ফাইলে যেতে পারবেন না, আউটপুট পুনর্নির্দেশটি ফাইলটি মুছে দেয়।

আরও স্পষ্ট করার জন্য, যদি আমি কোনও ফাইল বাছাই করতে চাই এবং সাজানো ফলাফলগুলি একই জায়গায় রেখে দিতে চাই তবে আমি চেষ্টা করার চেষ্টা করতে পারি sort < foo > foo। আউটপুট পুনর্নির্দেশ ব্যতীত আউটপুট fooপাওয়ার প্রস্তুতিতে ফাইল কেটে যায় । এবং তারপরে বাছাই করার মতো কিছুই নেই। "-O" ছাড়াই এটি করার উপায় হবে sort < foo > bar ; mv bar foo। আমি ধরে নিই যে -oবিকল্পটি আপনাকে এ নিয়ে উদ্বিগ্ন না হয়ে কিছু একই কাজ করে।


12
আপনি এটিও করতে পারেন sudo sort -o /some/placeযে আপনার অ-অনুমোদিত ব্যবহারকারীকে লেখার অনুমতি নেই have
বাহামাত

8
এবং বাহামতের মন্তব্যে বিভ্রান্তি এড়াতে সহায়তা করার জন্য: তিনি বলছেন না যে তারা কোনও ফাইল বাছাই করতে পারে যার কাছে তার অনুমতি নেই। আই / ও পুনঃনির্দেশ কাজ করে ... সুডোর সাথে খারাপভাবে কাজ করে। যেহেতু আপনার শেলের মধ্যে পুনঃনির্দেশটি স্থান নেয় (সুডো এটি চালাচ্ছে কেবলমাত্র একটি আদেশ), সুডোর মাধ্যমে কমান্ডের সাথে পুনঃনির্দেশ ব্যবহার করা বিরক্তিকর। (বাহামত কী বলছে আমি প্রাথমিকভাবে বিভ্রান্ত ছিলাম, তাই অন্যরাও বিভ্রান্ত হতে পারে)।
কুর্তেম

3
কেবল শয়তানের উকিল খেলতে, "ইনপুট ফাইল" সমস্যা এবং "সুবিধাপ্রাপ্ত পুনঃনির্দেশ" সমস্যা উভয়েরই বিকল্প রয়েছে এবং উভয় বিকল্পই "একটি কাজ ভালভাবে করুন" এর চেতনায় আরও বেশি। "ইনপুট = আউটপুট" এর জন্য, রয়েছে sponge(মর্টিলের অংশ)। তৈরী ফেরৎ সেখানে বংশীধ্বনিতুল্য হয় | sudo tee, যা একটি একক সহজ প্রোগ্রাম বিশেষাধিকার উদ্দীপন সীমিত সুবিধা রয়েছে, tee
jw013

ভাল দিক. যদিও -oবিকল্পটি sortস্পঞ্জের অনেক আগে থেকেই ছিল। এটি কমপক্ষে 4.4-লাইট 2 (যা ওপেনবিএসডি সিভিএসে ইতিহাস শুরু হয়) হিসাবে পুরানো। এবং এমন কোনও ক্ষেত্রে যেখানে আপনি কোনও অ-সুবিধাযুক্ত ফাইলটিতে অপারেটিং করছেন এবং কোনও সুবিধাযুক্ত অঞ্চলে | sudo teeলেখছেন, দুর্দান্ত কাজ করে তবে বেশিরভাগ সময় আপনি পুরো জিনিসটি সুবিধাপ্রাপ্ত হওয়ার sudoপ্রত্যাশা করছেন এবং আপনাকে ট্রিপ আপ করে চলেছেন। এবং sudo grep file | sudo teeনির্বোধ।
কুর্তেম

1
sortকিছু আউটপুট শুরু করার আগে পুরো ইনপুটটি পড়তে হবে, এ কারণেই এটি নিরাপদে এর ইনপুটটি ওভাররাইট করতে পারে। এটি আউটপুট শুরুর আগে মেমরিতে বা অস্থায়ী ফাইলগুলিতে ডেটা সঞ্চয় করতে পারে।
স্টাফেন চেজেলাস

12

'-O' বিকল্পটি ইতিমধ্যে ছিল sortএর ইউনিক্স ষষ্ঠ সংস্করণ

তবে আমি আপনার সাথে একমত যে এটি ইউনিক্স দর্শনের মধ্যে নেই। uniqসেই বিকল্পটি sortছিল না (এবং তখনকারটিও ছিল না -u)।

আমার পিডিপি -11 এ আমি একটি ছোট প্রোগ্রাম ব্যবহার করেছি যা একটি প্যারামিটার নেবে:

renac whatever

যদি whateverইতিমধ্যে বিদ্যমান থাকে তবে এটি স্টিডিন থেকে অস্থায়ী ফাইল পর্যন্ত সমস্ত কিছু লিখবে, কেবলমাত্র whateverস্টিডিন ইনপুট শুকিয়ে যাওয়ার পরে এটির নামকরণ করা হয়েছিল। এইভাবে আপনি renacইনপুট ওভাররাইট করার সুযোগ ছাড়াই কোনও ফাইলের নাম পুনর্নির্দেশের পরিবর্তে কোনও কমান্ডের আউটপুটটি পাইপ করতে পারেন । ওভাররাইটিং সমস্যাটিকে সেভাবে সমাধান করা আইএমএইচও আরও ইউনিক্স দর্শনের সাথে খাপ খায়।

প্রোগ্রামটির পরে কিছু সংযোজন হ'ল: স্টিডিনে কিছু না উপস্থিত থাকলে আউটপুট ফাইলটি ওভাররাইট করা না (যেমন কমান্ডলাইনের অংশটি ভুল টাইপের ফলস্বরূপ), এবং নামকৃত ফাইলে স্টিডিন যুক্ত করার বিকল্পের অনুমতি দেয়।

এটি ছিল প্রথম (তবে প্রথম নয়) বাস্তব সি প্রোগ্রামগুলির মধ্যে একটি (আমার কাজের জন্য আমি বেশিরভাগই সেই সিস্টেমে পাস্কলে ডেভেলপ করেছি)।


যদি আমি সঠিকভাবে বোঝা যায়, aptদান জিএনইউ / লিনাক্স মানুষ কার্যকারিতা পুনর্লিখিত সংস্করণ থাকতে পারে renacপ্রদত্ত নামক একটি প্রোগ্রামের সাথে sponge(থেকে manএকটি ফাইলে মান ইনপুট এবং লেখার আপ শোষণ: ), package moreutils`।
41754

@uprego। আমি স্রেফ স্পঞ্জ.কের উত্স দেখেছি এবং মনে হচ্ছে স্পঞ্জিংয়ের (স্ট্যান্ডিন -> স্টডআউট) কার্যকারিতার কারণে এটি প্রচুর কোড ওভারহেডের মধ্যে রয়েছে।
অ্যান্টন

@uprego তন্ন তন্ন spongeনা moreutilsআসলে গনুহ দ্বারা তৈরি করা হয়েছিল।
jw013

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