ডিরেক্টরিতে ফাইলের নাম স্বতঃপূরণ


16

এই প্রশ্নের বেশ অনুরূপ এই এক , কিন্তু আমি সমাধান বুঝতে পারছি না। আমি এই টিউটোরিয়ালটি জানি , কিন্তু তবুও আমি বুঝতে পারি না আমি কী ভুল করছি।

আমি যে ডিরেক্টরিতে রেখেছি সেগুলির তালিকাটি স্বয়ংক্রিয়ভাবে পূরণ করার চেষ্টা করছি /something/:

$ ls /something/

One    Other    Three

এইভাবে ঘটবে এমনভাবে:

$ hi [TAB]

One Other Three
$ hi O[TAB]

One Other

কেবলমাত্র যখন প্রথম শব্দটি থাকে hiএবং কেবল ভিতরে থাকে না /something/

আমি এখানে যা করছি .profile:

_codeComplete()
{
    local cur=${COMP_WORDS[COMP_CWORD]}
    COMPREPLY=( $(compgen `ls /something/` -- $cur) )

}
complete -F _codeComplete "hi "

উত্তর:


15

চেষ্টা করুন:

_codeComplete()
{
    local cur=${COMP_WORDS[COMP_CWORD]}
    COMPREPLY=( $(compgen -W "$(ls /something/)" -- $cur) )
}

complete -F _codeComplete hi

আপনাকে -Wবিকল্পটি নির্দিষ্ট করতে হবে compgenএবং কমান্ডটি উদ্ধৃত করতে হবে যা শব্দের তালিকা তৈরি করে।

এই ব্লগে সমাপ্তি ফাংশনগুলি কীভাবে লিখবেন সে সম্পর্কে আরও তথ্য: আপনার নিজের বাশ সমাপ্তি ফাংশন রচনা


6
এটি হোয়াইটস্পেস এবং অন্যান্য বিশেষ অক্ষরযুক্ত ফাইলের নামগুলিতে ব্যর্থ হবে।
গিলস 'তাই খারাপ হওয়া বন্ধ করুন'

2
completeআপনি যদি কমান্ডের নামটি ইতিমধ্যে জেনে না থাকেন এবং অনুসন্ধান করছেন autocompleteবা সন্ধান করছেন বা অবাস্তবভাবে এটি কঠিন হয় তবে উবুন্টুতে আপগ্রেড করার tab-completionসময় কমান্ডের নামটি আমি খুঁজে পেয়েছিলাম এবং এটি ঠিক করার দরকার ছিল আমার eject14.04 ( $ complete -p ls-> complete -F _longopt ls, তাই complete -F _longopt eject
সমাধানটি

1

আমাকে গৃহীত উত্তরের উপর উন্নতি করার চেষ্টা করুন।

মূল উত্তরটি হোয়াইটস্পেসযুক্ত ফাইলের নামগুলির সাথে ব্যর্থ হবে। কিছু তদন্তের পরে আমি বুঝতে পারছি আপনি ইনপুট বিভাজককে শেষ-অব-লাইনে পরিবর্তন করতে পারবেন:

IFS=$'\n'

সঠিকভাবে ফাংশন হ্যান্ডেল স্পেস তৈরি করে।

_codeComplete()
{
    local cur=${COMP_WORDS[COMP_CWORD]}
    IFS=$'\n' tmp=( $(compgen -W "$(ls ~/something/ )" -- $cur))
    COMPREPLY=( "${tmp[@]// /\ }" )
}

complete -F _codeComplete hi

1

এখানে এমন একটি সংস্করণ রয়েছে যা কেবল স্থানগুলি পরিচালনা করে না, তবে সেগুলি থেকেও পালিয়ে যায়:

_codeComplete()
{
    local cur=${COMP_WORDS[COMP_CWORD]}
    local AUTO_COMPLETE_DIRS=$(ls /something/)

    IFS=$'\n' COMPREPLY1=( $(compgen -W "$AUTO_COMPLETE_DIRS" -- $cur))
    COMPREPLY2=( "${COMPREPLY1[@]// /\ }" )
    COMPREPLY=($(printf "%q\n" "${COMPREPLY2[@]}"))

}
complete -F _codeComplete "hi "

( ডগবেন এবং এডুয়ার্ডো আলমেইডা ডস সান্টোসের উত্তরের উপর ভিত্তি করে , তবে এসও-তে এন্টাক দ্বারা সরবরাহিত হিসাবে পালানোর সাথে সাথে : /programming//a/11536437/1536933 )


0
_hi() {
    COMPREPLY=(cd /something/ && compgen -A directory -S / -- $2)
}

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