트리 아웃소싱 bash 완성 스크립트를 어디에 설치하나요?

트리 아웃소싱 bash 완성 스크립트를 어디에 설치하나요?

설치 중이에요립그렙우분투에서. 공식 저장소나 개인 PPA에는 존재하지 않으므로 프로젝트 지침에 따라 트리 래퍼로 설치했습니다.https://github.com/BurntSushi/ripgrep#installation.

나는 이러한 패키지가 다음에 존재해야 한다는 것을 이해했습니다 /usr/local.

  • /usr/local/bin바이너리 파일의 경우
  • /usr/local/share/doc/<package_name>문서화를 위해
  • /usr/local/share/man맨 페이지의 경우

bash 완성은 어떻습니까? 내가 아는 한, 이는 다른 범주보다 약간 덜 표준화되어 있으며 각 Bash설치마다 다를 수 있습니다. 우분투에서 이것을 할 수 있는 방법이 있나요?

답변1

많이 읽고 모아본 것 중에서, 특히 그들의공식 문서, /usr/share/doc/bash-completion/README.Debian및 소스 자체:

  • /etc/bash_completion.d/~이다유산dir, 완료된 위치열심히로드됨, 즉 기본 스크립트가 실행되는 동안 모든 것을 즉시 가져옵니다. 아직 소수의 패키지만 설치되어 있으며 대부분이 새로운 표준으로 마이그레이션되었습니다.

  • /usr/share/bash-completion/completions/파일이 완료된 디렉토리입니다동적 로딩주문형통과 bash-completion. 그들은 단지 소스일 뿐이다언제필요합니다(그리고 가장 중요한 것은만약에필수), 절대 사용하지 않을 명령에 대한 수많은 완성을 로드하지 않음으로써 많은 리소스를 절약합니다.


귀하의 의견과 관련하여 /etc:

적절하게 제어되는 패키지와 혼합될 것입니다... 별도의 경로가 있었으면 좋겠습니다.

의 파일은 /etc정확히 "제어 가능"하지 않습니다. 적어도 동일한 방식 /usr/bin이나 /usr/share방식으로는 불가능합니다.[1]그들은구성 파일,그들은의미는로컬 관리자(귀하)가 수정했습니다. 패키지는 설치될 때 일반적으로 기본값을 포함하는 패키지를 생성하므로 필요에 따라 수정해야 합니다.

일부 패키지는 구성 대신(또는 구성과 함께) 유지 관리를 단순화하기 위해 더욱 발전했습니다.문서또한 (빈) 구성을 생성합니다.목차"드롭인"의 경우 추가 사용자 정의 파일이 필요합니다. 그래서 대신개정하다특정 설정을 변경하는 구성 파일은 와 같은 도구를 사용하면 어렵고 오류가 발생하기 쉬운 작업 입니다 grep.sedawk만들다원하는 설정을 재정의하는 "구성 조각" 파일을 삭제하거나 삭제하세요.

/etc/{,*/}*.d/시스템의 모든 디렉터리를 봅니다 . 패키지에서 Google Chrome과 같은 사용자 정의 저장소를 설치하려고 합니까? 편집하지 말고 /etc/apt/sources.list파일을 드래그 앤 드롭하세요 /etc/apt/sources.list.d/. 새로운 서비스? /etc/systemd/system/. 환경 설정? /etc/sysctl.d/(그런데, 읽어보기를 참조하세요).

훨씬 더 쉽고 더 이상 서로의 발가락을 밟을 필요가 없습니다.

의 일부 디렉토리 /usr/share도 유사하게 작동합니다. .desktop파일이 거기로 이동하고 /usr/share/applications/, 새 MIME 유형이 거기로 이동하는 /usr/share/mime/packages/등입니다. 차이점 /etc은 관리자인 귀하가조정...도 아니다삭제직접 생성/설치한 파일이 없습니다.

이것이 바로 그 경우이다 /usr/share/bash-completion/completions/.


즉, 좋은 소식과 나쁜 소식이 있습니다.

나쁜 소식은...설치하려는 경우github 저장소에서 완료이는 bash 완료는 아니지만zsh파일을 완성하세요! 아니요, bash와 zsh는완전히완료와 관련된 비호환성.

걱정하지 마십시오. 좋은 소식은 다음과 같습니다.ripgrep적절한 저장소에서 사용 가능우분투 18.10부터 시작합니다!응! :디

sudo apt install ripgrep

뭔지 맞춰봐? 그것은bash 파일 완성! 물론 에 설치되어 있습니다 /usr/share/bash-completion/completions/rg.

이제 기뻐할 시간입니다, 친구들!


[1]: 솔직히 말해서 "관련성"이 있다고 말할 수 있습니다.감시를 받다", 통제 불능입니다. 읽기구성 파일에 대해 알아야 할 모든 것: dpkg로 관리되는 구성 파일자세한 내용은.

답변2

~에 따르면자주 묻는 질문(FAQ) 브로셔~/.local/share/bash-completion/completions/, 자체 로컬 완성인 경우 일반적으로 거기에 완성 파일을 넣어야 합니다. 디렉토리가 존재하지 않으면 mkdir -p물론 사용할 수 있습니다.

그것들을 넣어라completions하위 디렉터리 $BASH_COMPLETION_USER_DIR(기본값은 $XDG_DATA_HOME/bash-completion또는~/.local/share/bash-completion설정하지 않은 경우 $XDG_DATA_HOME) 해당 명령을 완료할 때 필요에 따라 자동으로 로드됩니다.

파일 이름이 의미심장합니다.

전체 파일 이름주문하다foo이 디렉토리에는foo, 또는foo.bash. (밑줄 접두사 _foo도 작동하지만 내부적으로 더 이상 사용되지 않음/대체 표시로 bash 완료를 위해 예약되어 있습니다.)

답변3

Distro 완료 스크립트는 일반적으로 발견된 경우 사용자 완성을 로드합니다. 예를 들어 우분투에서는 /etc/bash_completion소스 /usr/share/bash-completion/bash_completion.. 및저것~/.ssh/..~/.bash_completion및 (내 경우에는 resources ) 에서 스크립트를 가져옵니다 ~/local/etc/bash_completion.d/*.

~/.bash_completion따라서 이와 같은 설정이 있는 경우 (참조https://stackoverflow.com/a/12426672/274318디렉토리의 모든 파일을 가져오는 메소드의 경우 ripgrep로컬 완성 디렉토리에 완성을 설치할 수 있습니다.

답변4

/usr/local/share/bash-completion/completions비록 대부분 문서화되지 않았지만 스크립트도 로드된다는 점을 덧붙이고 싶습니다 . 바라보다이 문제. 나는 또한 개인적 RHEL8으로 Bash 4.4.20.

따라서 소프트웨어를 로컬로 설치하는 경우 ( 패키지 관리자가 관리하지 /usr/local/bin않고) 완성 스크립트를 여기에 두려고 할 것입니다 ./usr/share/bash-completion/completions

이 디렉터리는 기본적으로 존재하지 않을 수 있으므로 새로 생성하세요.

mkdir -p /usr/local/share/bash-completion/completions

스크립트를 넣고 셸을 다시 시작한 후에는 추가 구성 없이 사용자 정의 완성 기능이 작동해야 합니다.

관련 정보