명령이 존재하지 않는지 감지하도록 구성, 설치 제안


22

다음 과 유사하게 명령이 존재하지 않을 때 zsh표시되는 내용을 표시하도록 쉘을 구성 할 수 있습니까?bash

kahless:~$ sysv-rc-conf  
The program 'sysv-rc-conf' is currently not installed.  You can install it by typing:  
sudo apt-get install sysv-rc-conf

ZSH 프롬프트 대신

[kahless /home/teward]% sysv-rc-conf  
zsh: command not found: sysv-rc-conf

참고 프롬프트 자체를 변경하고 싶지는 않지만 결과를 zsh: command not foundbash와 유사한 출력으로 변경하고 싶습니다 The program 'progname' is currently not installed. You can install it by typing:.

ZSH에서도 가능합니까?

답변:


22

이 기능은 패키지에서 제공 합니다. 우분투는 기본적으로 설치하고 bash에서는 기본적으로 활성화하지만 zsh에서는 활성화하지 않습니다. 이 줄을 다음에 추가하십시오 .command-not-found 찾을 수없는 명령 설치~/.zshrc

. /etc/zsh_command_not_found

이 솔루션은 효과가있었습니다. 그러면 출력에서 ​​줄을 제거하는 방법이 있습니까? ( The program 'progname' is currently not installed. You can install it by typing:일부 부분 과 마찬가지로 결과물에 포함되어 있음 ) zsh: command not found: sysv-rc-conf
Thomas Ward

@EvilPhoenix : 어디서나 할 수 있습니다 (함수 또는 무언가 내부는 제외). zsh: command not found줄을 제거하는 방법을 모르겠습니다 .
Gilles 'SO- 악의를 멈춰라'

"명령을 찾을 수 없음"을 무시해도됩니다. 제안 된 설치 부분은 훌륭하고 명령이 존재하지 않아서 발생했다는 것을 알고 있기 때문에 좋았습니다.)
Thomas Ward

의 회전에 command not found메시지를 추가 할 수있는 exit함수의 끝 command_not_found_handler에서 /etc/zsh_command_not_found.
jens_bo

4

파일이없는 배포판에서 .zshrc를 공유하는 경우 파일이 존재하면 검사를 추가 할 수 있습니다 /etc/zsh_command_not_found.

[[ -a "/etc/zsh_command_not_found" ]] && . /etc/zsh_command_not_found

또한 oh-my-zsh를 사용 하는 경우 동일한 기능을 수행하는 변수에 command-not-found추가 할 수 있는 플러그인이 이미 있습니다 plugins.


1

oh-my-zsh를 사용하는 경우 대신 내부에서 "플러그인"을 찾을 수 있습니다 .zshrc.

추가 command-not-found플러그인 (이 플러그인은 이미 기본적으로 설치됩니다) 자동로드에 플러그인의 목록.

이처럼 :

# Which plugins would you like to load? (plugins can be found in ~/.oh-my-zsh/plugins/*)
# Custom plugins may be added to ~/.oh-my-zsh/custom/plugins/
# Example format: plugins=(rails git textmate ruby lighthouse)
# Add wisely, as too many plugins slow down shell startup.
plugins=(git command-not-found)

0

작동 방식은 bash의 command_not_found_handle () 함수를 사용하는 것입니다. bash는 기본적으로 명령을 찾을 수 없을 때 호출되는 함수 인 후크를 제공합니다. 데비안의 bash는 (그리고 zsh와 동일하지는 않지만) 우분투의 bash 구현은 그것을 포착하고 패키지 검색을 수행합니다. zsh의 맨 페이지에서 비슷한 기능을 가지고 있는지 확인할 수 있습니다.

다음은 zsh가 유사하기를 시작하는 방법입니다.

mpandit@mpandit-ubuntu:~$ command_not_found_handle() {echo 'Handler: Command not found!';}
mpandit@mpandit-ubuntu:~$ ddaadada
'Handler: Command not found!
mpandit@mpandit-ubuntu:~$

데비안과 우분투의 배쉬에는 차이가 없습니다. 차이점은 우분투는 command-not-found기본적으로 설치 되고 데비안은 설치 하지 않는다는 것입니다. 이 기능은 zsh에도 이미 존재하며 기본적으로 활성화되어 있지 않습니다.
Gilles 'SO- 악마 그만'

이것은 command_not_found가 시스템에 포함되어 있지 않다고 가정합니다. 그러나 내가 찾고있는 것이 아닙니다. @Gilles의 대답은 내가 찾고있는 줄에 더 가깝습니다. 나는 그가 지정한 줄을 포함 할 위치를 찾으려고 노력하고 있습니다.
토마스 워드

command_not_found_handlerzsh 에서 호출 됩니다. zsh.sourceforge.net/Doc/Release/Command-Execution.html을 참조하십시오 .
Mikel

0

또한 zsh가이 동작을 100 % 수행하지 못하게하려면 다음과 같이 수동으로 수행하면됩니다.

/usr/lib/command-not-found urxvt

또는 $ PATH에 명령을 찾을 수 없습니다


3
내가 이것을 물었을 때, 나는 그것이 항상 작동하기를 원했다. : P
Thomas Ward
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.