ডিরেক্টরিতে সিডি করতে xargs ব্যবহার করে


উত্তর:


22

পাইপ একটি সাবপ্রসেসে xargs চালায়, এবং xargs একটি উপ-প্রসেসে সিডি চালায়। সাব-প্রসেসের পরিবর্তনগুলি পিতামাতার প্রক্রিয়াতে প্রচারিত হয় না।


এটি সম্পূর্ণ জ্ঞান করে। একটি ইউনিক্স noob সাহায্য করার জন্য ধন্যবাদ।
ইয়ান লটিনস্কি

3
ব্যাক-কোট ব্যবহার করে আপনি যা চান তা কার্যকর করতে পারেন: cd `echo "/some/directory/path" | cut -d\ -f1` (নোট করুন যে আমি ফাঁকা জায়গায় বিভক্ত করতে 'কাট' যুক্ত করেছি এবং প্রথম আইটেমটি xargs যেভাবে করেছে তা ধরুন)
স্লার্টিবার্টফেষ্ট

5
প্রকৃতপক্ষে, এটি প্রয়োজনীয়তার কারণে xargsচালানো যায় না , cdএটি একটি শেল অন্তর্নির্মিত এবং xargsকেবল নিখরচায় নির্বাহী চালাতে পারে run আপনি যা বলেছিলেন তা সাব-প্রোসেসেসগুলি সম্পর্কে সত্য।
পরবর্তী বিজ্ঞপ্তি না দেওয়া পর্যন্ত বিরতি দেওয়া হয়েছে।

/ ইউএসআর / বিন / সিডি অবশ্যই একটি ইউনিক্স ফ্রি স্ট্যান্ডিং ডকুমেন্টেড কমান্ড, কমপক্ষে সোলারিসে on
jlliagre

অটো উত্পাদিত পাথের জন্য @ স্লার্টিবার্টফেষ্ট ব্যবহার করে: cd `port file libcudd | sed -e 's/\/Portfile//'` (সাধারণত আপনি দীর্ঘায়িতভাবে ম্যাকপোর্টস পোর্টফিল অবস্থানের মতো ম্যানুয়ালি হ্যান্ডেল করতে চান না)।
আইওনিস ফিলিপিসিস

23

কমান্ডটি cdএকটি অন্তর্নির্মিত কারণ বর্তমান ডিরেক্টরি সম্পর্কিত তথ্য প্রক্রিয়াটির সাথে আবদ্ধ এবং কেবল শেল্ট বিল্ট-ইন চলমান শেলের বর্তমান ডিরেক্টরি পরিবর্তন করতে পারে।

আপনার কোডে দুটি সমস্যা রয়েছে:

  1. xargsচলতে পারে না cdকারণ cdএটি একটি অন্তর্নির্মিত কমান্ড এবং xargsকেবল এক্সিকিউটেবল ফাইলই চালাতে পারে।
  2. এমনকি যদি আপনি কল cdকরা একটি উপ-প্রক্রিয়াতে চালনা করেন তবে xargsএটি উপরে বর্ণিত হিসাবে পিতামাতার প্রক্রিয়াতে কোনও প্রভাব ফেলবে না।

সমাধানটি হ'ল একটি সাব-শেল চালানো, এর ভিতরে চলমান cdএবং তারপরে আপনি নতুন বর্তমান ডিরেক্টরিতে কমান্ডগুলি কার্যকর করতে পারেন।

ls | xargs -L 1 bash -c 'cd "$0" && pwd && ls'

ls | xargs ...এই উদাহরণে এটি করার কোনও মানে নেই । এটি $0echo "/some/directory/path" | xargs -L 1 bash -c 'cd "$0" && pwd && ls'
ভাস্কবাকী

আইএমও এর আরও ভাল সমাধান হবে: এলএস | xargs -L 1 -I @@ bash -c 'CD @@ && pwd&&Ls'
রোমান এম
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.