এই মুহূর্তে একটি বোকা মত মনে হচ্ছে। কেন এটি কাজ করে না?
echo "/some/directory/path" | xargs -n1 cd
এই মুহূর্তে একটি বোকা মত মনে হচ্ছে। কেন এটি কাজ করে না?
echo "/some/directory/path" | xargs -n1 cd
উত্তর:
পাইপ একটি সাবপ্রসেসে xargs চালায়, এবং xargs একটি উপ-প্রসেসে সিডি চালায়। সাব-প্রসেসের পরিবর্তনগুলি পিতামাতার প্রক্রিয়াতে প্রচারিত হয় না।
cd `echo "/some/directory/path" | cut -d\ -f1`
(নোট করুন যে আমি ফাঁকা জায়গায় বিভক্ত করতে 'কাট' যুক্ত করেছি এবং প্রথম আইটেমটি xargs যেভাবে করেছে তা ধরুন)
xargs
চালানো যায় না , cd
এটি একটি শেল অন্তর্নির্মিত এবং xargs
কেবল নিখরচায় নির্বাহী চালাতে পারে run আপনি যা বলেছিলেন তা সাব-প্রোসেসেসগুলি সম্পর্কে সত্য।
cd `port file libcudd | sed -e 's/\/Portfile//'`
(সাধারণত আপনি দীর্ঘায়িতভাবে ম্যাকপোর্টস পোর্টফিল অবস্থানের মতো ম্যানুয়ালি হ্যান্ডেল করতে চান না)।
কমান্ডটি cd
একটি অন্তর্নির্মিত কারণ বর্তমান ডিরেক্টরি সম্পর্কিত তথ্য প্রক্রিয়াটির সাথে আবদ্ধ এবং কেবল শেল্ট বিল্ট-ইন চলমান শেলের বর্তমান ডিরেক্টরি পরিবর্তন করতে পারে।
আপনার কোডে দুটি সমস্যা রয়েছে:
xargs
চলতে পারে না cd
কারণ cd
এটি একটি অন্তর্নির্মিত কমান্ড এবং xargs
কেবল এক্সিকিউটেবল ফাইলই চালাতে পারে।cd
করা একটি উপ-প্রক্রিয়াতে চালনা করেন তবে xargs
এটি উপরে বর্ণিত হিসাবে পিতামাতার প্রক্রিয়াতে কোনও প্রভাব ফেলবে না।সমাধানটি হ'ল একটি সাব-শেল চালানো, এর ভিতরে চলমান cd
এবং তারপরে আপনি নতুন বর্তমান ডিরেক্টরিতে কমান্ডগুলি কার্যকর করতে পারেন।
ls | xargs -L 1 bash -c 'cd "$0" && pwd && ls'
ls | xargs ...
এই উদাহরণে এটি করার কোনও মানে নেই । এটি $0
echo "/some/directory/path" | xargs -L 1 bash -c 'cd "$0" && pwd && ls'