Yeni apt komutu için bash-completion'u etkinleştirebilir miyim?

20

14.04'ten beri Ubuntu'da bulunan yeni apt komutu görünüyor. apt-get ile apt-cache arasındaki işlevselliğin gerçekten kullanışlı bir kesişimidir, ancak bash-completion 'nin mevcut sürümü bunu bilmiyor ... Bu da lot kullanımını zorlaştırıyor.

apt komutunun kullanımı kolay hale getirmek için bu işlevi Bash'e eklemenin hızlı bir yolu var mı?

    
sordu Oli 09.04.2014 22:15

2 cevap

26

Bu, bash-complete paketindeki bir ihmal, apt değil. Sadece bir tamamlama yok gibi görünüyor, bu yüzden apt komutu için yapabildiklerimi bir kenara attım (bu var olan en iyi belgelenmiş komut değil!)

Aşağıdaki, mevcut apt-get tamamlamasından gelen bir uyarlamadır (çıkarılmış öğeler ve apt-cache 'sinin tamamlanmasından eklenen bitlerle). % Co_de% dosyasını çalıştırın ve aşağıdakilere yapıştırın:

# 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*\).*//" | 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

Ardından, tamamlamayı yüklemek için sudoedit /usr/share/bash-completion/completions/apt dosyasını çalıştırın. Ardından source ~/.bashrc + Sekmesi tamamlanmalıdır.

Bu, artık mevcut olmayan seçenekler sunabilir. Sanırım ana komutları (zaman içinde değişebilir) çivilendim ama en azından ortak komutlarla size yardımcı olacağım: apt show firef list search show update install co_de% remove upgrade full-upgrade edit-sources .

Açıkçası, bir bash-tamamlama idaresinin yukarıda belirtilenleri atmak istemesi durumunda, GPL altında hoş geldiniz (yine de dist-upgrade 'nin bir kez belgelendikten sonra taze başlaması cazip gelse de!)

    
verilen cevap Oli 09.04.2014 22:15
1

Neden orijinal bash-tamamlanması kullanılmıyor?

Bu komut dosyasını deneyin. Bash-completion'u ~/tmp/bash-completion 'da indirip yükleyecektir.

#!/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 dosyasına koyulabilen% co_de komutuyla veya ~/.bashrc dizinindeki bir dosyaya - daha iyisi - symlink komutu ile kullanmaya başlayın. Orijinal bash-tamamlamayı kaldırın, böylece aynı anda hem yükleme yapmazsınız.

    
verilen cevap Adam Ryczkowski 11.04.2014 13:02

Etiketlerdeki diğer soruları oku