我有许多用于启动和停止服务的脚本。使用 Tab 键补全时,需要输入以下内容,这很令人沮丧:
./serviceScript.sh [sta|sto]
在有足够的信息通过制表符补全完成单词 start 或 stop 之前。
是否有人能用不同的词语来合理地代替开始和停止,或者有更好的方法来解决我的问题?
答案1
如果您只是想避免每次都输入那么多内容,您可以在输入一次命令后使用 Ctrl + R 查看命令的历史记录。
按下 Ctrl + R 后,您可以开始写入,一旦您开始写入,bash history 就会完成历史记录中的命令。因此,如果按下 Ctrl + R 后您刚刚写入,st
并且您执行的最后一条命令是带有停止将会出现的论点。
如果你想要一个较旧的版本,例如使用命令开始参数,只需按 Ctrl + R 即可获得完整的启动命令。
答案2
如果开始和停止输入太多了,为什么不创建执行其中一个或另一个操作的别名呢?
# (for bash)
alias myservicebegin='serviceScript.sh start'
alias myserviceend='serviceScript.sh stop'
当然,如果打字太费力了,您可以随时为所需操作制作桌面图标/快捷方式,然后只需单击...此后的唯一选项可能是服务猴子或类似的东西。(哈!服务的服务猴子......)
答案3
对于 Bash,您可以使用 Bash 补全功能。从您的发行版安装 bash_completion 包。您很可能已经拥有 /etc/init.d 脚本的补全功能。如果没有,您可以在网上阅读如何自己完成补全。这里有一个关联。
另一种方法是使用如下预定义函数:
if [[ ${EUID} == 0 ]] ; then # available only for root user
# rc scripts managing
rc() { /etc/init.d/$*; }
complete -o filenames -W "$(cd /etc/init.d/ && echo *)" rc
rc-start() { for arg in $*; do rc $arg start; done }
rc-restart() { for arg in $*; do rc $arg restart; done }
rc-stop() { for arg in $*; do rc $arg stop; done }
rc-status() { for arg in $*; do rc $arg status; done }
fi
在这里,您可以使用rc
命令来调用 init.d 脚本,例如:rc apache2 start
。这将转换为/etc/init.d/apache2 start
。该命令还具有目录中文件的自动完成功能init.d
,即当您键入:时,rc apa[TAB]
它将自动完成为rc apache2
。
其他短命令是为了方便:rc-start apache2
将调用rc apache2 start
,因此/etc/init.d/apache2 start
编辑:如果您的发行版使用 rc.d 作为服务,则可以将 /etc/init.d 路径更改为 /etc/rc.d。
答案4
您可以尝试一些像这样的技巧:
a=(/etc/init.d/*(x:t))
function start stop restart reload { /etc/init.d/$1 $0 }
for i (start stop restart reload) compctl -k a $i
它将允许您输入类似以下内容的内容:rest
Tabsma
Tab其将扩展为restart smartmontools
并调用/etc/init.d/smartmontools restart
。
但是你的 zsh 发行版中可能已经有一些针对该任务的完成函数。只需查看一下即可functions/Completion/Unix/
。