bash - 如何定义函数名称“模式”的完成?
问题描述
我有几个只使用目录的函数,所有函数名都遵循这种模式(以_dir结尾):
something_dir () { ... }
something_else_dir() { ... }
...
对于所有这些,我将完成定义为:
complete -A directory something_dir something_else_dir ...
是否可以自动为所有函数定义完成,以便每个以_dir结尾的新函数只完成目录?
解决方案
用于compgen -A function
列出所有功能;然后grep -E '.*_dir$'
过滤掉以_dir
.
complete -A directory $(compgen -A function | grep -E '.*dir$')
这假设所有以结尾的函数名称_dir
都没有特殊符号,如*
和空格。根据规范,应该始终如此。
此命令只会为已经存在的函数设置完成。要为您将在交互式会话中定义的函数自动添加完成,请将命令添加到,PROMPT_COMMAND
以便在每次提示时执行它。
PROMPT_COMMAND="complete -A directory \$(compgen -A function | grep -E '.*dir$')"
推荐阅读
- php - 执行 mysqli_query 有效,但它不返回 WHERE CLAUSE 中给出的确切行
- javascript - 全球 Firebase 参考
- ios - AVCaptureSession captureOutput 回调丢帧并抛出 OutOfBuffers 错误
- android - 使用 Appium 与 Uiautomator 的优势
- c - C:没有单独的函数,代码就无法工作。为什么?
- ios - 快速获取当前位置API的温度
- r - mgcv::s(..., bs = "re") 导致加载NSM3包时出错
- google-analytics - 在 Google Analytics 中跟踪根域和子域
- c# - 如何设置 VisualStudio Code 来编译 C# 项目?
- html - 即使使用 Bootstrap 而不是使用 px,网页也没有响应