可通过 Tab 完成的友好名称来表示开始/停止

可通过 Tab 完成的友好名称来表示开始/停止

我有许多用于启动和停止服务的脚本。使用 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

它将允许您输入类似以下内容的内容:restTabsmaTab其将扩展为restart smartmontools并调用/etc/init.d/smartmontools restart

但是你的 zsh 发行版中可能已经有一些针对该任务的完成函数。只需查看一下即可functions/Completion/Unix/

相关内容