我注意到使用 zshhistory
从 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
显然,我不明白 shell 的核心方面。
需要什么来解决这些问题?
这种现象不仅仅存在于 Emacs 中。当我运行远程 ssh 命令时,例如出现相同的错误消息。ssh [email protected] 'histdb --limit 2000'
答案1
我的 zsh 没有histdb
命令,所以我必须假设它确实是一个函数而不是内置命令。
Shell 函数由源脚本加载,通常是您的个人初始化脚本或系统级初始化脚本。有多个这样的脚本,并且它们并非在所有情况下都运行,因此如果在错误的脚本中定义该函数,则该函数在某些情况下可能不可用。
此外,init 脚本可以检测 shell 运行的环境并有条件地加载部件。也许由于某种原因,当您在 emacs 中运行 zsh 时,它不会加载在 emacs 之外运行时获得的所有函数。
可以肯定的是,我们必须知道函数是从哪个文件加载的,以及该文件中的定义之前是否有任何条件代码。