我为一个幽灵网站制作了一个初始化脚本。我使用的是 Linux Mint 16(又名 Ubuntu 13.10)
当我输入此内容时,我的脚本没有显示在自动完成功能中。
sudo service f<tab>
有什么原因吗?我得到了一个不同的脚本“friendly_recover”,但不是我的。
谢谢!
麦克风
/etc/init/furtheryet.org.conf
# furtheryet.org
start on startup
script
cd /var/www/furtheryet.org/ghost
npm start --production
end script
答案1
您是否希望它sudo service f<tab>
能够自动完成sudo service furtheryet.org.conf
?
不会,因为:
- 这只是一个配置文件
- 它位于错误的目录中
您应该考虑该/etc/init.d
文件夹:
该
/etc/init/
文件夹仅包含所使用的配置文件Upstart
。该
/etc/init.d
文件夹包含响应start
、stop
、restart
、reload
(以及您可以实现的任何内容)的 shell 脚本。
进一步阅读:https://askubuntu.com/questions/5039/what-is-the-difference-between-etc-init-and-etc-init-d
也就是说,为了使您的脚本自动完成,您至少应该将其放在/etc/init.d
文件夹中,并使其可执行。
但你的脚本实际上只是一个配置文件。你应该考虑编写一个特定的服务/初始化脚本并将其放入您的/etc/init.d
文件夹中。
在某些情况下,我注意到即使脚本位于您中,您仍可能会遇到作为用户的/etc/init.d
自动完成问题。Ubuntu 13.10
root
要纠正此问题,请以 root 用户身份编辑$HOME/.bachrc
文件并取消注释以下内容:
if [ -f /etc/bash_completion ] && ! shopt -oq posix; then
. /etc/bash_completion
fi
然后.bashrc
通过运行重新加载文件:. $HOME/.bashrc
答案2
这是一个老问题,但我通过谷歌找到了它,所选的答案是错误的。
Upstart 作业必须放置到/etc/init
文件夹中。
根据 Debian 政策,每个使用 upstart 提供标准守护进程的软件包都需要在 /etc/init.d 中提供符号链接。
然后,sudo 服务名称的自动完成将会起作用。
/etc/init 中有一些特殊的 upstart 作业,它们在 /etc/init.d 中没有对应的条目。这些作业是个例外。
答案3
如果您在同一个目录中,请输入 ,./f
然后点击<tab>
。否则,您必须先输入:,/etc/init/f
然后再点击<tab>
。
并且你的脚本必须是可执行的:
chmod +x /etc/init/furtheryet.org.conf