我正在寻找一个 bash/zsh钩子,当找不到命令时调用它。
假设我运行一些任意可执行文件:
xyz foo --bar
- 说 bash/zsh 找不到可执行文件。
- 有没有办法处理“未找到”,然后将一些库动态加载到 PATH 中?
像这样的东西:
function xyz {
if ! test -f xyz; then
load_libs xyz
fi
command -v xyz;
}
类似这个函数的东西,但它适用于未知的可执行文件。
所以一般来说它看起来像:
function on_not_found {
if ! test -f "$1"; then
load_libs "$1"
fi
command -v "$@";
}
两者都
zsh
具有bash
挂钩函数,您可以定义这些函数来处理找不到命令的情况。它被称为command_not_found_handle
inbash
和command_not_found_handler
inzsh
(受bash
's 启发,但错字/误称已修复)。但是请注意,它们在子进程中运行(更不用说子shell 可能找不到该命令),因此无法更改您的shell 环境。
你可以这样做:
zsh
IN_CNFH
如果命令成功后仍然找不到,避免无限递归的部分load_lib
。如果您已经有一个
command_not_found_handler
(某些系统在其 zsh 默认配置中提供了一个,以在找不到命令时建议要安装的软件包的名称),您可以在它之前插入类似的内容:重击
bash 中的等效项如下所示:
或者增量变体,以防已经存在
command_not_found_handle
: