쉘 기능인 일부 쉘 명령을 항상 사용할 수 없는 이유는 무엇입니까?

쉘 기능인 일부 쉘 명령을 항상 사용할 수 없는 이유는 무엇입니까?

historyzsh를 사용하여 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 외부에서 실행할 때 얻는 모든 기능을 로드하지 않을 수도 있습니다.

확실히 하려면 함수가 어떤 파일에서 로드되었는지, 그리고 해당 파일의 정의 앞에 조건부 코드가 있는지 알아야 합니다.

관련 정보