যুক্ত স্থানগুলির সাথে স্বয়ংক্রিয়ভাবে সমাপ্তি বাশ - কেন, এবং কীভাবে ঠিক করবেন?


29

আমি অক্ষর টাইপ করার চেয়ে ট্যাব সমাপ্তি বেশি ব্যবহার করি। আমি টাইপ করতাম rm ~/De<TAB>এবং এটি সম্পূর্ণ হয়ে rm ~/Desktop/যায় যাতে আমি পরবর্তী স্তরে চালিয়ে যেতে পারি।

সম্প্রতি, সেই আচরণ বদলেছে। সমাপ্তিটি এখন ফলন দেয় rm ~/Desktop<SPACE>যার অর্থ আমি অবিরত রাখতে চাইলে আমাকে অবশ্যই ব্যাকস্পেস এবং স্ল্যাশ টাইপ করতে হবে। এটি আমাকে কাঁদিয়ে তোলে।

পরিবর্তনগুলি ফাংশনে অবস্থিত হবে বলে মনে হচ্ছে _longopt()/etc/bash_completionতবে যে যতটা আমি অনুসরণ করতে পারেন হয়। এই পরিবর্তনটি কি ইচ্ছাকৃত, এবং যদি তাই হয় তবে এটি কীসের পক্ষে ভাল? আমি কি অন্য কোনও সিস্টেম থেকে পুরানো কোডটি কেবল অনুলিপি না করে একটি কনফিগার বিকল্প দ্বারা পুরানো আচরণটি ফিরে পেতে পারি?

সম্পাদনা: রেফারেন্সের জন্য ফাংশন।

_longopt()
{
    local cur prev split=false
    _get_comp_words_by_ref -n = cur prev

    _split_longopt && split=true

    case "$prev" in
        --*[Dd][Ii][Rr]*)
            _filedir -d
            return 0
            ;;
        --*[Ff][Ii][Ll][Ee]*|--*[Pp][Aa][Tt][Hh]*)
            _filedir
            return 0
            ;;
    esac

    $split && return 0

    if [[ "$cur" == -* ]]; then
        COMPREPLY=( $( compgen -W "$( $1 --help 2>&1 | \
            sed -ne 's/.*\(--[-A-Za-z0-9]\{1,\}\).*/\1/p' | sort -u )" \
            -- "$cur" ) )
    elif [[ "$1" == @(mk|rm)dir ]]; then
        _filedir -d
    else
        _filedir
    fi
}

আমি দেখতে পাচ্ছিলাম যে this / ডেস্কটপটি কোনও ফাইল বা একটি খালি ডিরেক্টরি হলে এটি বোঝা যাবে । এবং দ্বিতীয় ক্ষেত্রে, এটি কেবল যেমন কমান্ডগুলির জন্য দরকারী rmdir, এর জন্য mkdirবা নয় touch
l0b0

আপনি আপনার _longopt()ফাংশন বডি পোস্ট করতে পারেন ?
আলেকসান্দ্র লেভুকুক

@ এমপিআই: সচেতন হন যে সমাপ্তি কমান্ডের উপর নির্ভর করতে পারে (কমান্ড লাইনের প্রথম শব্দ)। এছাড়াও এটি readlineসেটিংসের উপর নির্ভর করে (আপনার কাছে কোনও ~/inputrcফাইল আছে?) এবং আইটেমটি একটি সত্য ডিরেক্টরি বা ডিরেক্টরিতে একটি সিমলিংক।
এনজোটিব

অবশ্যই সম্পূর্ণতা লাইনটির প্রথম শব্দের উপর নির্ভর করে। যে কারণে আমি কখনও কখনও সম্পূর্ণ হওয়ার কৌশলটি কল্পনা করার জন্য একটি ফ্যান্টাসি কমান্ড ব্যবহার করি এবং এটি প্রেরণের আগে কেবল এটি আসল কমান্ডে পরিবর্তন করি। এবং .inputrcএই সিস্টেমে আমার আর নেই। (সেই দিনগুলি ছিল, ব্যাকস্পেস এবং কার্সার কীগুলি ঠিক করা ...) এবং এটি সমস্ত উপাদান, ডিরেক্টরি বা ফাইল, সিমলিংক বা না-এর ক্ষেত্রে ঘটে।
এমপিআই

1
দুর্দান্ত প্রশ্ন, আমি ঠিক একই আচরণ পর্যবেক্ষণ করেছি এবং এটি আমাকে বিরক্ত করে। কারণ সম্পর্কে ধারণা নেই, যদিও।
ক্রিস্টোফ

উত্তর:


22

এটি একটি পরিচিত বাগ। দেখুন এই এলপি প্রশ্ন ও এই বাগ 1 2

এই মন্তব্যটি স্থির বলে মনে হচ্ছে। আপনি যদি একটি ফিক্স জন্য অপেক্ষা করতে না পারে তাহলে স্বাভাবিক চ্যানেল, সম্পাদনা নিচে চুয়ানো /etc/bash_completionলাইন 1587, পরিবর্তন defaultকরার জন্য filenames(একটি ব্যাকআপ বানিয়ে)।


3
সারাংশ: এটি একটি বাগ সংশোধন করা হয়, আপনি এটি স্থানীয়ভাবে ঠিক না হওয়া পর্যন্ত প্যাচ সম্পাদনা করে আসার করতে /etc/bash_completionলাইন 1587, পরিবর্তন defaultকরার জন্য filenames
এমপিআই

আমার অ্যাওয়ার্ড সম্পাদনা করেছেন
ক্রিস্টফ

9

উবুন্টু 12.04 এ অ্যাডোব রিডার ইনস্টল করার পরেও আমি একই সমস্যা পেয়েছি এবং সমাধান করেছি।

আমি _filedirব্লকটি মন্তব্য করেছি /etc/bash_completion.d/acroread.shএবং এটি আবার স্বাভাবিকভাবে কাজ করেছে।


আজকের তারিখ হিসাবে এটি আমার পক্ষে কাজ করেছে।
জন মোলার

1
এখানে একই: অ্যাকোরিয়াড এটি ট্রিগার করে এবং _filedirব্লকটি (উপরে ডানদিকে) মন্তব্য করে এটি স্থির করে। প্রভাবটি দেখতে আপনার সমস্ত শেলগুলিতে আপনাকে লগ আউট করতে হবে বা 'এক্সিকিউট ব্যাশ' চালাতে হবে, এই প্রশ্নটি দেখুন
dirkjot

2

আমারও একই সমস্যা ছিল এবং আমি /etc/bash_completion.d/ ডিরেক্টরিটি সরিয়ে এটি ঠিক করেছি, তারপরে bash_completion পুনরায় ইনস্টল করুন। আমার মনে হয় একটি পুরানো ফাইল এই ডিরেক্টরিতে ছিল ... আশা করি এটি আপনার সমস্যারও সমাধান করবে।



2
এটি - সত্যই - এটি স্থির করেছে। যাইহোক, এই পদ্ধতিটি অনেকগুলি সম্পূর্ণ মৌলিক, কারণ এটি অনেকগুলি পরিপূর্ণতা দূর করে দেয়। প্যাকেজটি মোছার পরে bash-completion, বাকি ফাইলগুলির মধ্যে একটি /etc/bash_completion.d/অবশ্যই অপরাধী হতে হবে। এটি acroread.shআমার ক্ষেত্রে ছিল - এটি নতুন সংজ্ঞা দেয় _filedir
এমপিআই
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.