.Bashrc এ এই লাইনের কারণে বাশ শুরু করতে ধীর গতির। এর কারণ কি হতে পারে?


19

আমার .bashrcফাইলটিতে এই প্রভাবটির জন্য একটি লাইন রয়েছে:

alias prog="/path/to/script.sh $(find $(pwd) -name prog)"

আমি যখন এই লাইনটি মন্তব্য করি, আমি কোনও নতুন টার্মিনাল খুললে বাশ প্রায় তত্ক্ষণাত্ শুরু হয়। এই রেখার সাথে, আমার কার্সারটি দেখানোর আগে 4-5 সেকেন্ড বিলম্ব হয়।

নেস্টেড কমান্ড $(pwd)ইত্যাদি মুছে ফেলা আবার এটির গতিও বাড়ায়। ইহা কি জন্য ঘটিতেছে? আমি কি এখনও কোনওভাবে নেস্টেড কমান্ড ব্যবহার করতে পারি?


4
সমস্যাটি হ'ল findআদেশটি, যা বুট সময়ে কার্যকর হয় এবং ডিরেক্টরি কাঠামোর উপর নির্ভর করে কার্যকর করতে দীর্ঘ সময় নিতে পারে। আপনি যদি ডাবল-কোটের পরিবর্তে একক ব্যবহার findকরেন, রান সময় চালানো হবে, যখন aliasডাকা হবে। এটি নির্ভর করে আপনি কোন কার্যনির্বাহী ডিরেক্টরিটি ব্যবহার করতে চান, তা বর্তমানের ঘোষণার সময়, বা রান টাইমে current উপায় দ্বারা $(pwd)প্রকাশ করার জন্য বরং একটি অদক্ষ উপায় .বা $PWD
এএফএইচ

15
আমি জানি আপনি যা চাইছেন তা নয় তবে এটি অনেকটা এক্সওয়াই সমস্যার মতো দেখায় । আপনার ব্যবহার করে স্ক্রিপ্টটি সনাক্ত করতে হবে কেন find? একবার আপনি এটি ইনস্টল করার পরে, আপনি কোথায় তা জানেন। এমনকি আপনি যদি এটি ঘন ঘন আপডেট করেন এবং এর নাম পরিবর্তন করেন তবে আপনি এর সাথে একটি প্রতীকী লিঙ্ক বজায় রাখতে পারেন তাই এটি সর্বদা একটি নির্দিষ্ট নামের অধীনে উপলব্ধ।
স্লেসকে

5
@ এএফএইচ দয়া করে উত্তর হিসাবে উত্তর পোস্ট করুন, মন্তব্য নয়।
ডেভিড রিচারবি

1
@ ডেভিডরিচার্বি - আমি নিশ্চিত করতে চেয়েছিলাম যে পোস্ট করার আগে এটিই সত্যই উত্তর ছিল। আমি ভাবছিলাম যে স্ক্রিপ্টটি একটি স্বেচ্ছাসেবী ডিরেক্টরিতে পাওয়া ফাইলগুলিতে কাজ করবে।
এএফএইচ

উত্তর:


45

কারণ কমান্ড প্রতিস্থাপনটি ডাবল-কোটের ভিতরে রয়েছে, আদেশটি নির্ধারিত হওয়ার সময় এটি মূল্যায়ন করা হয়। এটি চলাকালীন findআপনার হার্ড ডিস্কের সামগ্রীগুলি অনুসন্ধান করার .bashrcকারণ করে।

বিপরীতে, আপনি ব্যবহারের সময় এটি মূল্যায়ন করতে চান বলে মনে হয়। সেক্ষেত্রে একক উদ্ধৃতি ব্যবহার করুন:

alias prog='/path/to/script.sh $(find "$(pwd)" -name prog)'

মনে রাখবেন যে পাওয়া যায় এমন যে কোনও ফাইলের নামের মধ্যে শ্বেত স্থান থাকলে এই উপনামটি ব্যর্থ হবে। তা এড়াতে:

alias prog='find . -name prog -exec /path/to/script.sh {} +'

এই পরবর্তী ফর্মটি কোনও ধরণের ফাইলের নামের জন্য নির্ভরযোগ্যভাবে কাজ করবে।


1
'ব্যবহারের সময়'। এবং আপনার দ্বিতীয় লাইনটি একটি সাব-শেল তৈরি করা এড়িয়ে চলে।
rleir

11
পরন্তু, এখন প্রত্যেক সময় আপনি টাইপ prog, findচালানো যাবে, যেহেতু আগে, এটি শুধুমাত্র একবার (শেল সূচনার সময়) পিরচািলত হেব প্রয়োজন হবে।
el.pescado

এরপরে, ফাইল ক্যাচিংয়ের কারণে, দ্বিতীয়বার আপনি যখন একই রকম চালাই তবে findএটি সাধারণত অনেক দ্রুত।
রিইনারপোস্ট

21
@ এল.পেস্ক্যাডো উল্টোদিকে, এটি কল্পনা করা শক্ত যে, ব্যবহারকারী লগইন করার সময় উপস্থিত ফাইলগুলিতে কমান্ডটি চালিত করার উদ্দেশ্যে উদ্দেশ্যযুক্ত আচরণটি নয়, ফাইলগুলি যখন সেগুলি প্রসেস করার জন্য কমান্ড কার্যকর করে তখন উপস্থিত থাকে।
ডেভিড রিচার্বি

2
@ ডেভিডরিচার্বি সম্ভবত আমরা যদি পুরান পথটি না থেকে থাকে তবে আমরা progআবারো পথটি ক্যাশে করতে পারি এবং আবার চালাতে findপারি?
অ্যালেক্স ভং
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.