我已经编写了自己的 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 能够为我提供start
,stop
就像其他初始化脚本一样。例如, 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-completion
start
stop
如果您还想支持更多操作,请添加一个使用操作,如下所示:
*)
echo $"Usage: $0 {start|stop|status|restart|reload|force-reload}"
该脚本将解析该字符串并完成status
、restart
、等等。这假设您正在使用这样的 case 语句来管理操作参数:
case $1 in
start)
[...]
;;
stop)
[...]
;;
status)
[...]
;;
*)
echo $"Usage: $0 {start|stop|status}"
esac