![쉘 기능인 일부 쉘 명령을 항상 사용할 수 없는 이유는 무엇입니까?](https://linux55.com/image/215711/%EC%89%98%20%EA%B8%B0%EB%8A%A5%EC%9D%B8%20%EC%9D%BC%EB%B6%80%20%EC%89%98%20%EB%AA%85%EB%A0%B9%EC%9D%84%20%ED%95%AD%EC%83%81%20%EC%82%AC%EC%9A%A9%ED%95%A0%20%EC%88%98%20%EC%97%86%EB%8A%94%20%EC%9D%B4%EC%9C%A0%EB%8A%94%20%EB%AC%B4%EC%97%87%EC%9E%85%EB%8B%88%EA%B9%8C%3F.png)
history
zsh를 사용하여 Emacs에서 실행할 때 명령을 사용할 수 없다는 것을 알았습니다 shell-command
.
history | grep runserver
밝혀지다 zsh:fc:1: no such event: 1
.
나는 또한 histdb
다음의 명령을 사용합니다.https://github.com/larkery/zsh-histdb이 명령은 zsh에서 사용할 수 있지만 Emacs에서는 호출할 수 없습니다.
histdb --limit 2000 | grep runserver
산출zsh:1: command not found: histdb
분명히 나는 쉘의 핵심 측면을 이해하지 못합니다.
이러한 문제를 해결하려면 무엇이 필요합니까?
이 현상은 Emacs에만 존재하는 것이 아닙니다. 예를 들어 원격 ssh 명령을 실행하면 동일한 오류 메시지가 나타납니다.ssh [email protected] 'histdb --limit 2000'
답변1
내 zsh에는 명령이 없으므로 histdb
내장 명령이 아니라 실제로 함수라고 가정해야 합니다.
셸 기능은 소스 스크립트(일반적으로 개인 초기화 스크립트 또는 시스템 수준 초기화 스크립트)에서 로드됩니다. 이러한 스크립트가 여러 개 있고 모든 경우에 실행되는 것은 아니므로 잘못된 스크립트에 함수를 정의하면 경우에 따라 해당 함수를 사용하지 못할 수도 있습니다.
또한 init 스크립트는 셸이 실행 중인 환경을 감지하고 조건에 따라 구성 요소를 로드할 수 있습니다. 어쩌면 어떤 이유에서든 emacs에서 zsh를 실행할 때 emacs 외부에서 실행할 때 얻는 모든 기능을 로드하지 않을 수도 있습니다.
확실히 하려면 함수가 어떤 파일에서 로드되었는지, 그리고 해당 파일의 정의 앞에 조건부 코드가 있는지 알아야 합니다.