বাশে কীভাবে ধীরে ধীরে স্ব-পরিপূর্ণতা ডিবাগ করবেন এবং ঠিক করবেন?


26

সাম্প্রতিক আপডেটের পরে (উবুন্টু 12.04 এলটিএস), কমান্ড লাইনে সম্পূর্ণ ট্যাবটি ধীর গতির। আংশিক কমান্ড (উদাঃ evi [TAB]) বা আংশিক ফাইলের নাম (উদাঃ evince somedocu[TAB]) প্রবেশ করার পরে শেলটি কখনও কখনও সর্বদা না হলেও বেশ কয়েক সেকেন্ড স্থায়ী থাকে।

ব্যক্তিগতভাবে আমি ধীরের চেয়ে কম পাওয়ারফুল স্বতঃপূরণ পছন্দ করব। একটি সাধারণ ফিক্স আছে?

সম্পাদনা করুন: মন্তব্য সম্পর্কিত অতিরিক্ত তথ্য:

  • PATH বেশ মানক। bin / বিনের কিছু বাশ স্ক্রিপ্ট রয়েছে

    $ echo $PATH
    /home/USERNAME/bin:/usr/local/bin:/usr/bin:/bin:/usr/games
    
  • ওয়ার্কিং ডিরেক্টরিতে ফাইলের সংখ্যা 100 এরও কম।

  • স্বতঃপূর্ন বৈশিষ্ট্যটি বিশেষত অস্বাভাবিক ডিস্ক ক্রিয়াকলাপ (সিস্টেম আপগ্রেড) এর পরে ধীর ছিল। এটি সম্ভবত সম্ভব, সেই পুনর্নির্মাণ / ইউএসআর / বিন এবং অন্যান্য ডিরেক্টরিগুলির ফলে পিছিয়ে পড়েছে।

4
আপডেটের সাহায্যে আপনি নিজের হার্ড ড্রাইভের গতি পরিচালনাকে সক্ষম করে তোলেন না এবং স্বয়ংক্রিয়রূপে স্বয়ংক্রিয়রূপে গণনা করতে সক্ষম হওয়ার জন্য ডিস্কটি জেগে থাকার জন্য অপেক্ষা করে?
ভিনসেন্ট নিভোলিয়ার্স 14

2
এটি আপনার বর্তমান ডিরেক্টরিতে কতগুলি ফাইলের উপর নির্ভর করে?
টেরডন

1
# প্রতিধ্বনি $ পথ কী বলে? আপনার পাথ ডিরেক্টরিতে যদি আপনার অনেকগুলি (কয়েক হাজার বা তার বেশি সংখ্যক) ফাইল থাকে তবে এটি এর কারণ হতে পারে।
স্টিফান

উত্তর:


28

আমি ফিক্সিং সম্পর্কে জানি না - এমন সমস্ত ধরণের জিনিস রয়েছে যা বিলম্বের কারণ হতে পারে। তবে আমি তদন্তের জন্য কয়েকটি টিপস দিতে পারি।

একটি অনুমান হিসাবে, সম্ভবত কোনও অনুসন্ধানের পথের কোথাও একটি ডিরেক্টরি রয়েছে ( $PATHবা এমন কোনও জায়গা যেখানে বাশ সম্পূর্ণরূপে ডেটা সন্ধান করে) এটি একটি ফাইল সিস্টেমে যা প্রতিক্রিয়া জানাতে ধীর। সাধারণত এটি দূরবর্তী ফাইল সিস্টেমগুলি ধীর গতিতে থাকে তবে এটি একটি ব্যর্থ হার্ড ডিস্ক, একটি হ্যাং FUSE ড্রাইভার ইত্যাদিও হতে পারে

তদন্তের প্রথম ধাপটি set -xশেলটি পরিপূর্ণতা তৈরির জন্য কার্যকর করা আদেশগুলির সন্ধান পেতে চালানো run যেখানে থেমে আছে দেখুন।

যদি এটি পর্যাপ্ত তথ্য না দেয় তবে বড় বড় বন্দুক নিয়ে আসুন। শেলের প্রক্রিয়া আইডি ( echo $$) নোট করুন । অন্য টার্মিনালে, চালান strace -f -s9999 -p$$(বা অন্য ইউনিক্সের স্বাদে চলমান হলে স্ট্রেসের সমতুল্য )। স্ট্রেস প্রক্রিয়া দ্বারা সম্পাদিত সিস্টেম কলগুলি তালিকাভুক্ত করে। দেখুন যে এটি ফাইলগুলি অ্যাক্সেস করছে যা এটি করা উচিত নয় বা যদি কিছু ফাইলে অ্যাক্সেস ধীর হয়। কমান্ড লাইনে অপশন যুক্ত -Tকরা straceএটি প্রতিটি সিস্টেম কলে সময় ব্যয় করে।


1
আমি ইউনিক্সটি কত সময় ব্যবহার করেছি এবং এটি set -xকী কমান্ডের বিষয়ে জানতাম না । খুব "হ্যাকার মোডে জড়িত"
ম্যাট ফ্লেচার

6
পিএস, set +xসাধারণ নন-ডিবাগ মোডে ফিরতে ব্যবহার করুন
ম্যাট ফ্লেচার

19

যদি আপনার * নিক্স বাক্সটি এলডিএপি ক্লায়েন্ট হিসাবে সেটআপ হয় তবে আপনার এই সমস্যা হতে পারে এমনকি স্থানীয় ব্যবহারকারী হিসাবে লগ ইনও।

বিরক্তিকর ডিবাগ তথ্য: ডিবাগিংয়ের সাথে set-x, আমি সম্পূর্ণ হওয়াটি দেখতে পেয়েছিলাম যা এখানে ঝুলছিল:

> set -x
> ls foo<tab>
...                     <--- lots of output removed
...
+ _quote_readline_by_ref foo quoted
+ '[' -z foo ']'
+ [[ foo == \'* ]]      <--- froze here
+ [[ foo == ~* ]]       <--- actually causing the trouble

নিশ্চিত করুন: আমি ls ~*যা নিশ্চিত হয়েছি এটিও ঝুলিয়েছে। দেখা যাচ্ছে যে আমার এলডিএপ সার্ভারটি স্বাচ্ছন্দ্যযুক্ত ছিল, তবে এটি বাশ সম্পূর্ণ হওয়া এবং এলএসের মতো জিনিসগুলিকে প্রভাবিত করবে না!

সমাধান: আহা, বাশ-সমাপ্তি + এলডিপাপের বিরুদ্ধে একটি বাগ দায়ের করা আছে , এটি একটি নতুন সংস্করণে সংশোধন করা হবে, এবং যদি আপনি অপেক্ষা করতে না চান তবে একটি সরল প্যাচ । ট্যাব সমাপ্তি আবার দ্রুত, হুর!

লিঙ্কটি চলে যাওয়ার ক্ষেত্রে প্যাচফাইলে এখানে। এটি কেবল 545 এবং 547 লাইনে ~ এড়িয়ে চলেছে:

--- /usr/share/bash-completion/bash_completion.orig 2014-11-06 10:36:14.981888369 +0100
+++ /usr/share/bash-completion/bash_completion  2014-11-06 10:36:25.142070963 +0100
@@ -542,9 +542,9 @@
     elif [[ $1 == \'* ]]; then
         # Leave out first character
         printf -v $2 %s "${1:1}"
-    elif [[ $1 == ~* ]]; then
+    elif [[ $1 == \~* ]]; then
         # avoid escaping first ~
-        printf -v $2 ~%q "${1:1}"
+        printf -v $2 \~%q "${1:1}"
     else
         printf -v $2 %q "$1"
     fi

এই প্যাচটি কার্যকর হওয়ার জন্য আপনাকে বর্তমান ssh সেশন থেকে বেরিয়ে আসতে হবে এবং পুনরায় লগইন করতে হবে।


1
আমার এই সঠিক সমস্যাটি ছিল এবং প্যাচটি ভাল
রেডম্যান

2
এখানে একই সমস্যা (ডেবিয়ান 8.5) 2/3 বছর আগে এবং সমাধান মনোযোগের মতো কাজ করে। ডেবিয়ান 8.6 এর সমস্যা নেই।
YoMismo

2
আমি -xa লক্ষ গুণ ব্যবহৃত সেট করেছি এখনো আমি আশা এটি কখনও এছাড়াও সমাপ্তির কর্মক্ষমতা বিষয় দেখাই, অনেক ধন্যবাদ!
মার্চএইচ

ডেবিয়ান 9.8 সঙ্গে এই সমস্যা ছিল!
ফিলিপ গ্যাচাউড

0

ব্যাশ-সমাপ্তি পুনরায় ইনস্টল করার চেষ্টা করুন

sudo apt-get install --reinstall bash-completion

আমার জন্য এটি উবুন্টু 18.04.3 এলটিএসে স্থির করা হয়েছে


0

এছাড়াও কিছু লোক গিট ব্যাশ অটো সম্পূর্ণরূপে অতিরিক্ত অটো সম্পূর্ণ বৈশিষ্ট্য ব্যবহার করে । বাশ সম্পূর্ণ হওয়া আস্তে extra অতিরিক্ত অটো সম্পূর্ণ বৈশিষ্ট্যগুলি দুর্ব্যবহারের ফলাফল হতে পারে।

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

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