ওএস এক্সে বাশ সম্পূর্ণকরণ এত ধীরে লোড হচ্ছে কেন?


16

আমার ম্যাকবুক প্রোতে বাশ সমাপ্তি এত ধীরে কেন লোড হচ্ছে তা আমি বুঝতে পারি না।

আমি আমার নিম্নলিখিতগুলি করেছেন ~/.bash_profile:

echo "Loading BashCompletion..."
if [ -f /opt/local/etc/bash_completion ]; then
    . /opt/local/etc/bash_completion
fi
echo "BashCompletion loaded."

bash_completion এর কার্যকর করার সময়টি সাধারণত 2 সেকেন্ড।

আমি টার্মিনালটিতে কাজ করার সময় সত্যই বিরক্তিকর বলে মনে করি যার জন্য আমাকে ক্রমাগত নতুন ট্যাব খোলার প্রয়োজন requires

আমি কি এই উপায়টি বা কিছু ক্যাশে রাখতে পারি?

(দ্রষ্টব্য আমি iTerm2 ব্যবহার করছি এবং এটি ম্যাকের মূল টার্মিনালটিতেও সমান ধীর)।


এমনটা হওয়া উচিত নয়। আমি কি ঠিক করছি আপনি ম্যাকপোর্টের ব্যাশ সম্পূর্ণতা ব্যবহার করছেন?
স্ল্যাক করুন

আপনি যে ফাইলটি লোড করেছেন সেটির মতো দেখতে কেমন?
ড্যানিয়েল বেক

@ এসএলএইচইচকি: হ্যাঁ আমি প্রকৃতপক্ষে ম্যাকপোর্টের ব্যাশ সমাপ্তিটি ব্যবহার করছি
নিখোঁজ

@ ড্যানিয়েল: এটি ব্যতীত সবকিছু ঠিক আছে। আমি প্রায় প্রতিটি লাইনে প্রোফাইল দিয়েছি।
গায়েব

5
আমি একই স্বচ্ছলতা অনুভব করি এবং আমি হোমব্রিউ ব্যবহার করছি।
ব্রাইস

উত্তর:


10

সংক্ষিপ্ত সংস্করণ: একটি একক লাইন অপসারণ /usr/local/etc/bash_completionকরা দশ সেকেন্ড থেকে একটি সেকেন্ডের এক চতুর্থাংশে নতুন ট্যাব খোলার সময়কে হ্রাস করেছে। বিস্তারিত পড়ুন।

আমি হোমব্রু থেকে বাশ-সমাপ্তি ব্যবহার করছি এবং একই সমস্যার মুখোমুখি। প্রতিবার আমি টার্মিনালটি খোলার সময় ব্যাশ সমাপ্তির স্ক্রিপ্টগুলি লোড করতে দশ সেকেন্ডের বেশি সময় লেগেছিল।

বেশিরভাগ সময়, এটি have()ফাংশনটির একক লাইন দ্বারা গ্রহণ করা হয় : typeকমান্ড-লাইন প্রোগ্রাম ইনস্টল করা আছে কিনা তা নির্ধারণের জন্য একটি কল ।

ডিফল্ট have()ফাংশন এবং প্রদত্ত সমস্ত বাশ সম্পূর্ণকরণের স্ক্রিপ্টগুলির জায়গায়, স্ক্রিপ্টগুলি লোড করতে 10.561 গুলি লাগবে ( আমার ফাইলের লাইনে উপসর্গ করে রিপোর্ট করা timeহয়েছে) ।. /opt/local/etc/bash_completion.bash_profile

PATH=$PATH:/sbin:/usr/sbin:/usr/local/sbin type $1 &>/dev/null &&আমার /usr/local/etc/bash_completionস্ক্রিপ্টের লাইনটি মন্তব্য করার পরে ( have=yesলাইনটি ছেড়ে নতুন টার্মিনালটি খোলার জন্য মাত্র 0.258 সেকেন্ড সময় লাগে This /usr/local/etc/bash_completion.dডিরেক্টরি থেকে অপ্রয়োজনীয় সমাপ্তি স্ক্রিপ্টগুলি (সিমলিংকগুলি) সরিয়ে এবার আরও কমিয়ে আনা যেতে পারে ।

কেন জানি কলটি typeএত দীর্ঘ নিচ্ছে। আমি পরবর্তী তদন্ত করছি।

এই পদ্ধতির একটি সম্ভাব্য খারাপ দিক হ'ল এটি আপনার জন্য কোনও ব্যবহার না করা সত্ত্বেও ব্যাশ সমাপ্তির ফাংশনগুলিকে মেমরিতে লোড করবে। have()ফাংশন চেক একটি আদেশ বা অ্যাপ্লিকেশন ইনস্টল না করা দেখতে। যদি এটি না হয় তবে সমাপ্তি স্ক্রিপ্টটি সাধারণত লোডিং নিয়ে নিজেকে বিরক্ত না করার সিদ্ধান্ত নেয় কারণ এটি কোনও কাজে আসবে না।

এই মুহুর্তে, আমি ট্রেড অফে খুশি তবে typeসময় পাওয়ার সাথে সাথে আমি সমস্যাটি অন্বেষণ করতে চালিয়ে যাব। এর থেকে আরও ভাল সমাধান পেলে আমি আমার উত্তর আপডেট করব।


আমার জন্য, এই লাইনটি মন্তব্য করা 50 মিমি সময়কে 230 মিমি থেকে 180 মিমি পর্যন্ত হ্রাস করে। অবশ্যই আমি প্রথম জায়গায় এটি এত খারাপ ছিল না। 👍
এডওয়ার্ড অ্যান্ডারসন

এটি কেবল প্রায় 60 মিমি শেভ করে, তাই আমি কাজটি পুরোপুরি রাখিনি। আমার কাছে দশ সেকেন্ড অপেক্ষা করার সময় নেই, তবে প্রায় 2 সেকেন্ড, যা মৃদু বিরক্তিকর।
danemacmillan

7

উপসংহার MacOS এর নতুন শেল জন্য প্রারম্ভকালে বার তাদের জন্য খুব ধীর হয়ে আসছে যে কেউ জন্য, এই হল সমাধান

আমি কেবল আবিষ্কার করেছি যে বাস্তবে দুটি প্যাকেজ রয়েছে যা এর মাধ্যমে ইনস্টল করা যায় brew। আমি bash-completionবহু বছর ধরে প্যাকেজটি ইনস্টল করছি , এবং কখনই এটি নিয়ে প্রশ্ন করার মাথা ঘামাইনি, যদিও সেই সময়ে আমি বাশ 3 থেকে 4 এ চলে গিয়েছি এখন 5. পর্যন্ত though , প্রায়শই এই খুব স্ট্যাকওভারফ্লো আলোচনায় হোঁচট খায়।

আরও একটি প্যাকেজ আছে bash-completion@2,!

পার্থক্য কি? bash-completionবাশ সংস্করণ 3.2 এর জন্য। bash-completion@2বাশ সংস্করণ 4.1+, এবং 5 এর জন্য।

পুরানো bash-completionপ্যাকেজটি সরিয়ে , এবং ইনস্টল করার সময় bash-completion@2, আমার শেল প্রারম্ভকালীন সময় 605ms থেকে 244ms এ নেমে গেছে। এটি একটি বিশাল গতির উন্নতি।

আমি সন্দেহ করি যে আমাদের মধ্যে অনেকেই এই একই ভুল করে চলেছে, যেমন brew infoপরিসংখ্যানগুলি দেখায় যে প্রাক্তনটির অনেকগুলি ইনস্টল রয়েছে, তবে শেষেরটি এত কম রয়েছে:

এখানে চিত্র বর্ণনা লিখুন

এটি লক্ষ করা উচিত যে বর্তমান নির্বাচিত উত্তরে কিছু লাইন মন্তব্য করার বিষয়ে উল্লেখ করা হয়েছে, যা প্রারম্ভকালীন সময়ে সামান্য উন্নতি সরবরাহ করে (যদি পুরানো bash-completionপ্যাকেজটি ব্যবহার করা হয় , যা সম্ভবত অনেকগুলি রয়েছে), তবে নতুন bash-completion@2প্যাকেজের উপর তার কোনও প্রভাব নেই : এই নতুন প্যাকেজ দ্রুত যাই হোক না কেন। এর অর্থ হ্যাকের দরকার নেই।

টি এল; ডিআর:

brew uninstall bash-completion && brew install bash-completion@2

আপনার .bashrcবা .bash_profileফাইলে সমাপ্তির ফাইলের উত্সের পথটি আপডেট করতে ভুলবেন না ।

সূত্র:


কিছুটা সম্পর্কিত বিষয় হিসাবে, আমি rcloneইউটিলিটিটি প্রচুর ব্যবহার করি , তাই এটি ইনস্টল। এটি আমার দেখা সবচেয়ে বড় ফাইলের সমাপ্তি ঘটেছে । এটি সরানো আমার শেল প্রারম্ভকালীন সময়কে কমিয়ে ~ 120 ডলার করে, যা খুব দ্রুত।


সম্পাদনা:

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


আমি মনে করি ম্যাকোজে ডিফল্ট বাশ সংস্করণটি এখনও v3.2 রয়েছে - আমি মনে করি না এটি বাশ ভি 4.2 দিয়ে জাহাজী করে। আপনার কি এমন কোনও রেফারেন্স রয়েছে যেখানে এটি বলে যে বাশ ভি 4.2 + সহ ম্যাকোস জাহাজগুলি?
নিউক্লিংার

1
আপনি ঠিক থাকবেন আমি কেন বিস্মিত হই যে কেন আমি তা উল্লেখ করলাম, কারণ ম্যাকওএস এখনও জাহাজে রয়েছে version 3.2.57(1)-release (x86_64-apple-darwin18)। যে ইশারা জন্য ধন্যবাদ; আমি আমার পোস্ট থেকে লাইনটি সরিয়েছি।
danemacmillan

1
বাফলিং, আমি জানি ... আপনার উত্তর আপডেট করার জন্য ধন্যবাদ!
নিউক্লিংার

3

গডবাইক উত্তর আমাকে দিয়েছে এই ধারণার সাহায্যে, আমি খুঁজে পেলাম যে আমার প্যাথ ভেরিয়েবলের কয়েকটি ডিরেক্টরি রয়েছে যার কোনও বাইনারি ছিল না বা উপস্থিত নেই, সেগুলি সরিয়ে দিয়ে তা উল্লেখযোগ্যভাবে বৃদ্ধি পেয়েছে। অন্য কথায়, আমার বাশার্কে এটিই ছিল AT

PATH="$GOPATH/bin:/some/directory/not/existing:/some/empty/directory:/some/directory/without/binaries:$PATH"

এবং তারপরে আমি এটিকে পরিবর্তন করেছি:

PATH="$GOPATH/bin:$PATH"

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


আমি আমার পাথ পরিবেশ পরিবর্তনশীল থেকে অস্তিত্ব নেই এমন রাস্তাগুলি সরিয়েও আমি প্রায় 5 সেকেন্ড থেকে 1 সেকেন্ডেরও কম সময়ে লোডের সময়টি পরিবর্তন করতে সক্ষম হয়েছি।
জুরিজন

0

আমারো একই ইস্যু ছিল. কয়েকটি সাধারণ ডিবাগিং ট্রিকস আমাকে মূল কারণ হিসাবে পেয়েছে।

প্রথমে সক্ষম করুন DEBUG modeযাতে আপনি দেখতে পাচ্ছেন কি হচ্ছে:

export BASH_COMPLETION_DEBUG=true

এটি কনসোলটিতে ভার্বোজ মুদ্রণ সক্ষম করে, যাতে আপনি শেষ কমান্ডটি দেখতে পারেন। আপনি এখন পটভূমিতে স্ক্রিপ্টটি কার্যকর করতে পারেন এবং আপনি কী ঘটছেন তা দেখতে পাবেন

. /opt/local/etc/bash_completion &

না নিন PID, যেটি আপনি পরে সঙ্গে ট্রেস করতে পারেন psবা pstree:

pstree -p <the PID>:

| |     \-+= 82095 mfellows -bash
| |       \-+- 82103 mfellows -bash
| |         |-+- 82104 mfellows cargo --list
| |         | \--- 82106 mfellows rustc -vV --cap-lints allow

আপনি দেখতে পাচ্ছেন, এটি মরিচা সম্পর্কিত কিছু কমান্ড শুরু করেছিল, যা যুগ যুগ ধরে নিয়ে যাচ্ছিল।

অস্থায়ীভাবে সরানো /opt/boxen/homebrew/etc/bash_completion.d/cargoআমার লক্ষণগুলির সমাধান করেছে।


-1

আপনি যদি ম্যাকপোর্টগুলি> = 2.1.2 এবং মাউন্টেন সিংহ চালাচ্ছেন তবে মনে bash_profileহয় এটি আপনার ভুল। ম্যাক ওএস এক্স এ কাজ করার জন্য গিট-সমাপ্তি.ব্যাশ কীভাবে পাবেন তার নির্দেশাবলী অনুসরণ করুন ? । আমি ধরে নিই যে এটি অটো-সমাপ্তির গতি বাড়িয়ে তুলতে পারে।

আর একটি সমাধান হ'ল ফিংক বা হোমব্রুয়ের মাধ্যমে অটো-সম্পূর্ণ ইনস্টল করার চেষ্টা করা । যদি এটি কাজ না করে, আপনি সম্পূর্ণরূপে অন্য শেলটি চেষ্টা করতে পারেন। আমি খুঁজে পেয়েছি যে ফিশ শেলটি স্বয়ংক্রিয়ভাবে সমাপ্তির ক্ষেত্রে আসে (বাক্সের বাইরে)। যদিও সংস্করণ 2 বিটাতে রয়েছে তবে আমি এটির সুপারিশ করব।


-1

আমি অনুমান করতে যাচ্ছি যে আপনার বাশ খুব পুরানো। আমি স্টক বাশ চালিয়ে যাচ্ছি যা মাউন্টেন সিংহের সাথে এসেছিল এবং আমি যা দেখছি তা এখানে:

$ port info bash-completion
bash-completion @2.0, Revision 1 (sysutils)

Description:          Programmable completion library for bash. This port
                      **requires bash >=4.1** and is meant to be used together with
                      the bash port.
Homepage:             http://bash-completion.alioth.debian.org/

Runtime Dependencies: bash
Conflicts with:       bash-completion-devel
Platforms:            darwin
License:              GPL-2+
Maintainers:          raimue@macports.org

$ bash --version
GNU bash, version **3.2.48(1)-release (x86_64-apple-darwin12)**
Copyright (C) 2007 Free Software Foundation, Inc.

আমি এই পোর্ট কমান্ড দেখতে পাচ্ছি না। :( আমার ম্যাকটিতে কোন গিট ট্যাব সমাপ্তির সফ্টওয়্যার চলছে তা আমি কীভাবে জানতে পারি
ডিন হিলার

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