su 이후 매뉴얼 페이지 완성이 실패하는 이유는 무엇입니까?

su 이후 매뉴얼 페이지 완성이 실패하는 이유는 무엇입니까?

내 기본 설치는 Debian 8.1입니다. 그래요

su
man apt<TAB>

하지만 아무것도 얻지 못했습니다. 사용자 mas와 root의 두 가지 모드로 작성할 때 매뉴얼을 봅니다 man apt-get. 그러나 탭 완성은 사용자 모드에서만 작동합니다.

루트에서 man을 실행한 후 테이블 완성을 활성화하는 방법은 무엇입니까? 이 기능이 기본적으로 비활성화되어 있는 이유는 무엇입니까?

답변1

실행하면 su비로그인 모드에서 bash가 호출됩니다. 그런 다음 Bash는 .bashrc해당 환경을 읽고 구성합니다.

실행되면 su -bash가 로그인 셸로 호출됩니다. 이 모드에서는 /etc/profile존재하는 경우 실행됩니다. Bash는 또한 ~/.bash_profile찾은 첫 번째 파일을 검색 하고 실행합니다. 문서화되어 있지는 않지만 이들 중 어느 것도 존재하지 않을 때 실행되는 것으로 보입니다.~/.bash_login~/.profile~/.bashrc

다른 동작이 발생하는 경우 bash 호출 방법에 따라 다른 파일을 사용하여 bash를 초기화할 수 있습니다.

echo .bashrc기존 파일 끝에 비슷한 줄을 추가해 어떤 파일을 호출할지 테스트해봤습니다. 그러면 어떤 구성이 호출되는지 표시됩니다.

매뉴얼 페이지의 INVOCATION 섹션에 이 동작에 대한 자세한 내용이 있습니다 bash.

에서는 탭 완성 기능을 사용할 수 있지만 bash일반적 으로 셸에서는 셸을 사용하지 못할 수 있습니다 sh. 사용자는 일반적으로 이를 쉘로 사용합니다. rootshbashbash

bashroot탭 완성을 시도하기 전에 했던 것처럼 실행 해 보세요 . 이렇게 하면 탭 완성이 활성화됩니다.

답변2

Bash에는 두 가지 완성 엔진이 있습니다. 하나는 주로 명령 위치의 명령과 매개변수 위치의 파일 이름만 완성하는 간단한 엔진이고, 다른 하나는 명령을 기반으로 매개변수를 완성하는 독특한 엔진입니다. 매뉴얼 페이지를 완성하려면 아름다운 매뉴얼 페이지가 필요합니다.

Bash를 시작하면 단순 완성 엔진만 활성화됩니다. 좋은 엔진을 얻으려면 /etc/bash_completion.

Debian에서는 read 지시문이 새 계정의 기본 설정에 /etc/bash_completion있지만 .bashrc시스템 구성 파일에는 없습니다 /etc/bash.bashrc. 사용자가 이를 선택 해제할 수 없도록 시스템 구성 파일에 저장되지 않습니다. 쉘의 고급 완성 시스템을 루트로 실행하려면 다음 줄을 추가해야 합니다 /root/.bashrc.

. /etc/bash_completion

관련 정보