3

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

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

Warning: Auto completion is not initialized. Please run : source ....; complete -F ...

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

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

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

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

4

2 回答 2

0

要么您希望每个用户都使用 bash 补全(我认为这不好,例如我更喜欢将其关闭),要么让用户自己决定,但是让他们在每个 TABTAB 上打印此消息是一种威胁,你不觉得吗?

我会将您认为每个用户都应该运行的内容放入 /etc/bash.bashrc 中。

于 2012-07-02T10:21:00.700 回答
0

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

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

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

于 2012-09-29T23:35:48.973 回答