새 apt 명령에 대해 bash-completion을 활성화 할 수 있습니까?


20

새로운 apt14.04부터 우분투에 존재하는 명령은, 간 기능 정말 유용 교차 될 것으로 보인다 apt-getapt-cache하지만 현재 버전의 bash-completion을 만드는 ... 그것에 대해 모르는 많은 사용을 어려워.

apt명령을 쉽게 사용할 수 있도록 Bash에이 기능을 추가하는 빠른 방법이 있습니까?


1
이 질문의 태깅은 meta에 대해 논의 되기 시작 합니다 .
Gilles 'SO- 악마 중지'

답변:


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.

분명히 bash 완성 관리자가 위의 내용을 파악하고 싶다면 GPL에서 환영합니다 (한 번 새로 시작한 apt것이 문서화되어 있습니다!).


8
버그를 열고 패치로 제출하십시오!
Jorge Castro

이 답변을 사용하는 방법에 대한 아이디어가 zsh있습니까?
Exeleration-G

런치 패드에서 "나도 어디로"가야 할 단어가 있습니까?
Mateo

1

원래 bash-completion을 사용하지 않는 이유는 무엇 입니까?

이 스크립트를 사용해보십시오. 에 bash-completion을 다운로드하여 설치합니다 ~/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

command . ~/tmp/bash-completion/bash_completion.sh~/.bashrc파일을 사용하거나 파일에 넣거나 /etc/profile.d/디렉토리의 일부 파일에 심볼릭 링크를 사용하여 시작할 수 있습니다 . 원래의 bash-completion을 제거하면 동시에 둘 다로드되지 않습니다.


나는 이것에 대해 생각 하지
Oli

1
@ 올리 글쎄요. 이 파일은 aptitude, apt-get하고 apt-cache. apt 완성 이란 정확히 무엇을 의미 합니까?
Adam Ryczkowski

3
내 첫 질문에 따르면 aptTrusty에있는 새로운 명령입니다. 여기에는 apt-get, apt-cache가 있습니다. 모두 한곳에서 약간의 번영이 있습니다.
Oli

@Oli 아, 맞아! 나는 그것에 대해 몰랐다. 그리고-bash-completion은 지금까지 그것을 지원하지 않습니다. 다행스럽게도 플러그인을 작성하는 것은 그리 어렵지 않으므로 곧 예상 할 수 있습니다. 내 스크립트를 사용하면 누가 먼저 스크립트를 사용할 수 있을지 모릅니다.
Adam Ryczkowski
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.