bash_completion 用于初始化脚本

bash_completion 用于初始化脚本

我已经编写了自己的 initscript /etc/init.d/myscript。我可以使用 service 命令启动和停止我的脚本

service myscript start
service myscript stop

当我输入时service <TAB>,bash_completion 显示我的所有初始化脚本/etc/init.d/,包括myscript.但当我打字时service myscript <TAB>什么也没有发生。我希望 bash_completion 能够为我提供startstop就像其他初始化脚本一样。例如, bash_completion 适用于service cups <TAB>,但我不知道它是在哪里定义的。没有/usr/share/bash-completion/completions/cups/etc/bash_completion.d/cups。那么service从哪里获取信息呢?我应该在哪里添加我的脚本信息?

答案1

在旧版本的 上bash-completion,例如 EPEL 存储库上可用于 CentOS 的版本,在/usr/share/bash-completion/.在这种情况下,您可能需要根据 cups 完成等示例添加其他脚本。

在较新的系统上,例如我的 Fedora 19,bash-completion在主脚本中附带了_service()和函数,它默认为任何已安装的服务提供和操作。它应该开箱即用。_services()/usr/share/bash-completion/bash-completionstartstop

如果您还想支持更多操作,请添加一个使用操作,如下所示:

 *)
    echo $"Usage: $0 {start|stop|status|restart|reload|force-reload}"

该脚本将解析该字符串并完成statusrestart、等等。这假设您正在使用这样的 case 语句来管理操作参数:

case $1 in
   start)
   [...]
   ;;
   stop)
   [...]
   ;;
   status)
   [...]
   ;;
   *)
      echo $"Usage: $0 {start|stop|status}"
esac

相关内容