Mac OS X의 명령에 대한 배쉬 완성


38

우분투에서와 같이 명령을 입력 할 때 프로그램 이름을 자동 완성 fink하고 얻는 방법은 무엇입니까?macportsapt-get

예를 들어 내가 입력하면

sudo port install ca

를 누르면 tab터미널이 자동 완성되거나 사용 가능한 명령이 표시됩니다.

OS X는 이후에도 자동 완성 명령을 수행하지 않습니다 sudo!

답변:


69

bash-completion은 다음에 대한 완성도를 높입니다.

  • sudo및 이후의 명령 이름which
  • Macports 및 Homebrew 패키지 이름 (선택 사항)
  • 다음 known_hosts과 같은 명령 에 대한 호스트 이름ssh
  • 폴더 CDPATH

등등. 을 사용하여 완료 명령 목록을 인쇄하고을 사용 complete -p하여 함수의 소스를 볼 수 있습니다 declare -f.

Homebrew 또는 MacPorts 및 Bash 설치

먼저, 지침에 따라 Homebrew 또는 MacPorts 를 설치해야 합니다. 참고 : 둘 다 충돌하므로 설치하지 마십시오.

그런 다음 최신 버전의 Bash를 설치하십시오. OS X의 내장 Bash는 약간 오래되었으며 Bash> 4.1을 통해 더 많은 완료 옵션을 얻을 수 있습니다.

brew install bash

또는

sudo port install bash

Homebrew 또는 MacPorts 사용 여부에 따라

Homebrew로 bash-completion 설치

를 설치하려면 bash-completion다음을 수행해야합니다.

brew install bash-completion

그리고 당신의 다음을 추가하십시오 ~/.bash_profile:

if [ -f $(brew --prefix)/etc/bash_completion ]; then
  . $(brew --prefix)/etc/bash_completion
fi

Homebrew는 현재 Bash 3.x에서 여전히 작동하는 이전 버전의 bash-completion (1.3)을 설치하지만 여전히 Bash 4.x를 사용하는 것이 좋습니다.

MacPorts로 bash- 완료 설치

MacPorts를 사용하는 경우 :

sudo port install bash-completion

그런 다음에 추가하십시오 ~/.bash_profile.

if [ -f /opt/local/etc/profile.d/bash_completion.sh ]; then
  . /opt/local/etc/profile.d/bash_completion.sh
fi

포트 이름 완성을 활성화하는 방법에 대한 지침 은 trac.macports.org/wiki/howto/bash-completion 을 참조하십시오 .


MacPorts의 bash-completion패키지는 이후에 추가 인수로 패키지 이름 완성을 지원합니다 port <verb>. 48-58 행을 참조 하십시오 . 이 동작에 암시되어 MacPorts를 위키 "있는 상태, 의 명령에 대해 예를 들어이 단지 파일과 디렉토리에 대한 아니라, 또한 port그래서 당신은 입력합니다. port <Tab>모든 가능한 명령 목록을 얻는다. "는 명시 적으로 언급하고 있지만, 동사의 완성 (매우 간단합니다).
— Daniel Beck

패키지 이름 은 자동 완성되며 위키에서는 언급하지 않습니다. 링크 된 스크립트 코드를 참조하십시오.
— Daniel Beck

는 variants.confMacPorts를 자체 완료되지 않습니다; variant.conf는 링크 한 위키 페이지에 설명 된대로 모든 포트에 대해 자동으로 설정되는 변형을 정의합니다 . 해당 라인을 추가하면 설치 한 포트에 대해 bash 완료 지원이 활성화됩니다.
— Kevin Reid

homebrew의 자동 완성에 대한 팁을 주셔서 감사합니다. 그 자체만으로도이 답변은 투표권을 얻었습니다.
— Paul Wagland

훌륭합니다. make자동 완성 기능을 사용하도록 설정 했습니다.
— Мати Тернер
당사 사이트를 사용함과 동시에 당사의 쿠키 정책과 개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.