"Xargs" এবং কমান্ড প্রতিস্থাপনের মধ্যে পার্থক্য?


14

অনেক ক্ষেত্রে আমি কমান্ড সাবস্টিটিউশন পরিবর্তে ব্যবহার করি xargs। যেমন rm $(ls)হিসাবে একইls | xargs rm

আসলে তাদের মধ্যে পার্থক্য কি?

আমি মনে করি পার্থক্যের মধ্যে একটি হ'ল কমান্ড সাবস্টিটিউশনটি সাব xargsশেল চলাকালীন বর্তমান শেলের মধ্যে রান করলেও আমি নিশ্চিত নই।

পার্থক্য তালিকা করুন।

উত্তর:


9

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

প্রথম পদ্ধতির সাথে আরেকটি সমস্যা হ'ল আউটপুটটি সাদা স্পেসে বিভক্ত হয়, তাই আপনি কোনও ফাঁকে ফাঁকে ফাইলের নাম ব্যবহার করতে পারবেন না। xargsহোয়াইটস্পেস সমস্যা দ্বারা প্রভাবিত হয়, তবে এটি ব্যবহৃত ডিলিমিটার পরিবর্তন করে এটি ঠিক করা যেতে পারে। উপায় দ্বারা ফাইলের নামগুলি সঠিকভাবে পরিচালনা করার জন্য, আপনাকে দ্বিতীয় উদাহরণে ডিলিমেটার হিসাবে নাল বাইট ব্যবহার করতে হবে।

তৃতীয় ইস্যুটি হ'ল গ্লোবগুলি প্রসারিত হয়, সুতরাং কোনও ফাইলের নামে যদি তারকাচিহ্ন বা প্রশ্ন চিহ্ন থাকে তবে অপ্রত্যাশিত ফলাফল আসবে।

আপনি এখানে ইস্যুতে একটি চমৎকার আলোচনা খুঁজে পেতে পারেন: http://mywiki.wooledge.org/ পার্সিংএল

সঠিক বাক্য গঠন হবে

echo rm *

বা যদি আপনার অবশ্যই জার্গস ব্যবহার করা হয়,

find . -maxdepth 1 -print0 | xargs -0 echo rm

echoআউটপুটটি সঠিক দেখলে অপসারণ করুন ।


1
@ সিনোশ: পাইপটির xargsকারণে সাবসেলেও চালিত হয়, যদি না আপনি সক্ষম হন shopt -s lastpipe, তবে এটি বর্তমান শেলটিতে চলবে। আপনি কোনও ভেরিয়েবল পরিবর্তন করছেন না বলে আমি মনে করি না যে এই ক্ষেত্রে সাবসিলে চালানো সমস্যা।
ব্যবহারকারী000001

1
@ সিনোশ: একের পর এক যুক্তি পাস করার জন্য আপনি -lপতাকাটি ব্যবহার করতে পারেন , পছন্দ করুন find . -maxdepth 1 -print0 | xargs -0 -l rm। দ্বিতীয় প্রশ্ন, যদি আপনি ব্যবহার করতে পারবেন না lsসঙ্গে xargs -0কারণ ম নাল Bute আউটপুট বিভক্ত করে না, কিন্তু নতুন লাইন (যা BTW ফাইলের নামের মধ্যে বৈধ) সঙ্গে
user000001

1
@ স্নোশ: প্রথম অনুচ্ছেদে নয়, দ্বিতীয়টি: -0বিকল্প ব্যতীত জার্গেজগুলি হোয়াইটস্পেসের সমস্যায় ভুগছে।
ব্যবহারকারী000001

1
পড়ুন man xargs, echoপরীক্ষার জন্য ব্যবহার করুন , না rmxargsআমাদের শেল সীমা অতিক্রম করতে দেয় (কিছু বাফার 65K এর মধ্যে সীমাবদ্ধ, ফাইলের নামের একটি তালিকা নয়)।
ওয়ালটিনেটর

1
@ স্নোশ: আমার কাছে খুব ভাল রেফারেন্স হ্যান্ডি নেই তবে আপনি টাইপ করতে পারেন xargs --show-limitsএবং আপনার সিস্টেমে যে সীমা নির্ধারণ করা হয়েছে তা আপনি দেখতে পাবেন
ইউজার000001
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.