নতুন অ্যাপটি কমান্ডের জন্য আমি কি বাশ-সমাপ্তি সক্ষম করতে পারি?


20

apt14.04 সাল থেকে উবুন্টুতে উপস্থিত নতুন কমান্ডটি কার্যকারিতার সত্যিকারের কার্যকর ছেদ বলে মনে হয় apt-getএবং apt-cacheবর্তমান সংস্করণটি bash-completionএটি সম্পর্কে জানে না ... যা এটি ব্যবহার করা বেশ শক্ত করে তোলে ।

aptকমান্ডটি ব্যবহার করা সহজ করার জন্য বাশে এই কার্যকারিতা যুক্ত করার কোনও দ্রুত উপায় আছে ?


উত্তর:


26

এটি bash-completeপ্যাকেজের একটি বাদ , নয় apt। এটি এখনও মনে হয় একটি সমাপ্তি এখনও বিদ্যমান নেই, সুতরাং আমি aptকমান্ডের জন্য যা করতে পারি তা একসাথে স্ক্র্যাপ করে ফেলেছি (এটি এখনকার সেরা নথিভুক্ত কমান্ড নয়!)

নীচে বিদ্যমান apt-getসমাপ্তি থেকে একটি রূপান্তরকরণ রয়েছে (উপাদানগুলি ছাঁটাই হয়ে গেছে এবং বিটগুলি apt-cacheসমাপ্ত হতে যোগ করা হয়েছে )। sudoedit /usr/share/bash-completion/completions/aptনিম্নলিখিতটিতে চালান এবং আটকান:

# Debian apt(8) completion                             -*- shell-script -*-

_apt()
{
    local cur prev words cword
    _init_completion || return

    local special i
    for (( i=0; i < ${#words[@]}-1; i++ )); do
        if [[ ${words[i]} == @(list|search|show|update|install|remove|upgrade|full-upgrade|edit-sources|dist-upgrade|purge) ]]; then
            special=${words[i]}
        fi
    done

    if [[ -n $special ]]; then
        case $special in
            remove|purge)
                if [[ -f /etc/debian_version ]]; then
                    # Debian system
                    COMPREPLY=( $( \
                        _xfunc dpkg _comp_dpkg_installed_packages $cur ) )
                else
                    # assume RPM based
                    _xfunc rpm _rpm_installed_packages
                fi
                return 0
                ;;
            *)
                COMPREPLY=( $( apt-cache --no-generate pkgnames "$cur" \
                    2> /dev/null ) )
                return 0
                ;;
        esac
    fi

    case $prev in
        -c|--config-file)
             _filedir
             return 0
             ;;
        -t|--target-release|--default-release)
             COMPREPLY=( $( apt-cache policy | \
                 command grep "release.o=Debian,a=$cur" | \
                 sed -e "s/.*a=\(\w*\).*/\1/" | uniq 2> /dev/null) )
             return 0
             ;;
    esac

    if [[ "$cur" == -* ]]; then
        COMPREPLY=( $( compgen -W '-d -f -h -v -m -q -s -y -u -t -b -c -o
            --download-only --fix-broken --help --version --ignore-missing
            --fix-missing --no-download --quiet --simulate --just-print
            --dry-run --recon --no-act --yes --assume-yes --show-upgraded
            --only-source --compile --build --ignore-hold --target-release
            --no-upgrade --force-yes --print-uris --purge --reinstall
            --list-cleanup --default-release --trivial-only --no-remove
            --diff-only --no-install-recommends --tar-only --config-file
            --option --auto-remove' -- "$cur" ) )
    else
        COMPREPLY=( $( compgen -W 'list search show update install 
            remove upgrade full-upgrade edit-sources dist-upgrade 
            purge' -- "$cur" ) )
    fi

    return 0
} &&
complete -F _apt apt

# ex: ts=4 sw=4 et filetype=sh

তারপরে source ~/.bashrcসম্পূর্ণতা লোড করতে চালান । তারপরে apt show firef+ Tabসম্পূর্ণ করা উচিত।

এটি আপনাকে এমন বিকল্পগুলি দিতে পারে যা কেবলমাত্র আর অস্তিত্ব নেই। আমি প্রধান কমান্ড (সময় পরিবর্তন হতে পারে) পেরেক দিয়ে থাকেন কিন্তু খুব অন্তত এটা সাধারণ কমান্ড দিয়ে সাহায্য করব: list search show update install remove upgrade full-upgrade edit-sources dist-upgrade purge

স্পষ্টতই, যদি কোনও ব্যাশ-সমাপ্তি রক্ষণাবেক্ষণকারী উপরের বিষয়টিকে ধরতে চান, আপনি জিপিএল এর আওতায় এটি স্বাগত জানাই (যদিও aptডকুমেন্টিং হয়ে যাওয়ার পরে আমাকে তাজা থেকে প্রলুব্ধ করতে হবে !)


8
একটি বাগ খুলুন এবং এটি প্যাচ হিসাবে জমা দিন!
জর্জি কাস্ত্রো

এই উত্তরটি কীভাবে ব্যবহার করবেন সে সম্পর্কে আপনার কোনও ধারণা আছে zsh?
এক্সিলারেশন-জি

লঞ্চপ্যাডে এই "আমাকেও" যেখানে কোনও শব্দ?
মাতিও

1

আসল বাশ-সমাপ্তি কেন ব্যবহার করবেন না ?

এই স্ক্রিপ্ট চেষ্টা করুন। এটি ব্যাশ-সমাপ্তি ডাউনলোড এবং ইনস্টল করবে ~/tmp/bash-completion

#!/bin/bash
echo -en "\e]2;Updating bash completion...\a"

katalog="~/tmp/bash-completion"

if [ ! -d "$katalog" ]; then
   mkdir -p $katalog
   cd $katalog
   cd ..
   git clone git://git.debian.org/git/bash-completion/bash-completion.git
   cd $katalog
   autoreconf -i
   ./configure
   make
   sudo make install
else
   cd $katalog
   if [ `git log --pretty=%H ...refs/heads/master^` != `git ls-remote origin -h refs/heads/master |cut -f1` ]; then
      git pull
      autoreconf -i
      ./configure
      make
      sudo make install
   else
      echo "Bash-completion is already up to date!"
   fi
fi

আপনি এটি কমান্ডের সাহায্যে ব্যবহার শুরু করেন . ~/tmp/bash-completion/bash_completion.sh, যা ~/.bashrcফাইলের মধ্যে স্থাপন করা যেতে পারে , বা - আরও ভাল - /etc/profile.d/ডিরেক্টরিতে কিছু ফাইলের সাথে এটি সিমিলিংক করুন । মূল বাশ-সমাপ্তি আনইনস্টল করুন, যাতে আপনি একই সাথে উভয় লোড শেষ করবেন না।


আমি এটি ভাবিনি তবে এগুলি এখনও
অলি

1
@ অলি ভাল, আমার ধারণা তারা এগুলি করে। ফাইল আছে aptitude, apt-getএবং apt-cacheযথাযথ সমাপ্তি বলতে কী বোঝ ?
অ্যাডাম রাইজকভস্কি

3
আমার উদ্বোধনী প্রশ্নে, aptএকেবারে নতুন (ইশ) কমান্ড যা ট্রাস্টিতে রয়েছে in এটিতে কিছু অ্যাপেট-গেট রয়েছে, কিছু অ্যাপ-ক্যাশে রয়েছে ... সমস্ত কিছুতে এক জায়গায় অতিরিক্ত বাড়তি বিকাশ।
অলি

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