Bash 완료 시 일부 명령을 숨기시겠습니까?

Bash 완료 시 일부 명령을 숨기시겠습니까?

Bash에서 다음 명령이 있다고 가정해 보겠습니다.

$ pyt[TAB][TAB]
pytest
python
python-config
python-dbg

99% 선택합니다 python. 너무 짜증나서 전화를 걸기 위해 pytest타이핑을 할 수 없게 됩니다 . Bash 완료를 숨길 수 있나요 ?pyt[TAB][RETURN]pythonpytest

내 한계:

  1. bash에서 이 제안이 발생하지 않도록 pytestat 바이너리를 제거할 수 있다는 것을 알고 있습니다 . /usr/bin/pytest하지만 루트 액세스 권한이 없으면 어떻게 되나요? pytest다른 스크립트가 제대로 작동하려면 중요한 스크립트가 있어야 한다면 어떻게 될까요?

  2. pytest바이너리를 삭제할 수 있지만 (이전에 이 작업을 수행한 적이 있음) 때로는 소프트웨어를 업그레이드할 때 이 스크립트가 다시 나타납니다.

  3. alias내가 좋아하는 앱의 키 입력을 저장하는 데 사용할 수 있다는 것을 알고 p있습니다 python. 그러나 나는 이러한 비표준 약어를 좋아하지 않습니다. 원격으로 다른 컴퓨터에 연결할 때 이것이 나를 혼란스럽게 합니다.

그렇다면 Bash 완료 시 특정 명령을 숨길 수 있는 방법이 있습니까? 최근 bash로 인해 작업 속도가 빨라지지 않았기 때문에 다른 쉘(zsh, fish 등)을 사용한 답변을 환영합니다.

답변1

이것은 꽤 새로운 것이지만,배쉬 4.4변수를 설정할 수 있습니다 EXECIGNORE.

아. 새 변수: EXECIGNORE; 명령을 검색할 때 일치하는 파일 이름이 무시되도록 하는 콜론으로 구분된 패턴 목록입니다.

~에서공식 문서:

실행 무시

콜론으로 구분된 쉘 모드 목록(참조패턴 매칭) PATH를 사용하여 명령 검색에서 무시할 파일 이름 목록을 정의합니다. PATH를 통한 조회 완료 및 명령 실행을 위해 전체 경로 이름이 이러한 패턴 중 하나와 일치하는 파일은 실행 가능한 것으로 간주되지 않습니다. 이는 [, test 및 [[ 명령의 동작에 영향을 주지 않습니다. 명령 해시 테이블의 전체 경로 이름에는 EXECIGNORE가 적용되지 않습니다. 실행 가능 비트가 설정되어 있지만 실행 가능하지 않은 공유 객체 파일을 무시하려면 이 변수를 사용하십시오. 패턴 일치는 extglob 쉘 옵션의 설정을 따릅니다.

예를 들어:

$ EXECIGNORE=$(which pytest)

또는 사용패턴 매칭:

$ EXECIGNORE=*/pytest

관련 정보