linux - 从 bash 脚本中检查自动完成是否已初始化

标签 linux bash shell autocomplete sh

我正在寻找一种方法来从我的 shell 脚本中检查脚本特定的完成是否已由用户使用 complete -F ...

初始化

我希望此检查打印出有关如何初始化完成的建议,例如:

警告:自动完成未初始化。请运行:source ....;完成 -F ...

问题是在子 shell 中运行的脚本没有关于用户工作的父 shell 的“完整”环境的信息。

所以 complete -p| grep my-script-name 从不返回任何结果。

用户应该运行“source”和“complete”命令或手动将它们添加到他的 .bashrc 中,因为我们在无法访问 bash 完成系统目录的服务器上工作。

或者,如果您知道从脚本中初始化(而不仅仅是检查)自动完成的方法,我会很乐意接受它。

最佳答案

您的脚本可以访问父 shell 的此类信息的唯一方法是包含它而不是作为子 shell 执行。与其指示您的用户他们可以包含一些配置,您可以设计您的脚本,使其在运行或包含时都能正常工作。

然后您可以简单地通知您的用户,如果他们想要启用完成,他们需要包含您的脚本而不是将其作为可执行脚本运行(根据您的意愿使用 source 或 . 的说明)。

但是,在这种情况下,我倾向于在文档中添加此信息或将其添加到始终显示的横幅中(但可以使用 -q 等选项开关禁用),而不是支持两种模式运行脚本(因为增益很小)。

关于linux - 从 bash 脚本中检查自动完成是否已初始化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11290833/

相关文章:

shell - 将标准输出重定向到日志,将标准错误重定向到错误日志

mysql - 在通过管道传输到 mysql 的同时对 mysqldump 执行 head

java - WSL Bash 未在 PATH 中找到 java

Ubuntu 中的 Java 开发

linux - 列出除一个目录外的所有目录

linux - 从 bash 提示符和脚本向 docker exec 传递参数

arrays - 如果数组来自源文件,则在 bash 中按索引访问数组无法正常工作

linux - Bash - 在脚本中执行命令,将单引号添加到包含空格的变量

macos - 终端:shell启动文件在哪里?

linux - save_stack_trace_tsk 和 struct stack_trace 在 Linux 5.2+ 中不再可用