我的世界输入指令大全怎么输入指令按Tab补全

老师说按tab补全,可是我按只会滴滴响怎么办
老师说按tab补全,可是我按只会滴滴响怎么办
写下你的评论...
Copyright (C)
All Rights Reserved | 京ICP备 号-2用SecureCRT telnet到远程Linux服务器,如何设置SecureCRT才能像本地操作Linux那样可以用tab键补全路径,以及用上下箭头显示历史命令? - 知乎7被浏览4104分享邀请回答01 条评论分享收藏感谢收起0添加评论分享收藏感谢收起写回答bash的按TAB键自动补全(自动完成)的原理与扩展 - CSDN博客
bash的按TAB键自动补全(自动完成)的原理与扩展
最近在用源码安装ceph,发现命令不能自动补全,然后找到了下面这篇文章,写的很好~转载一下~
源码安装ceph命令没法自动补全的解决方法:把ceph-deploy安装的可以自动补全的系统里/etc/bash_completion.d下ceph的文件scp到源码安装对应的位置,然后“.
/etc/bash_completion”就可以了~(注意点 . 号)
下面是正片环节~
用过bash的人,可能都对TAB自动补全功能有印象吧,按一下“TAB“键就自动帮你把命令或者文件名补全,确实好用。
这个应该是bash解析用户输入的时候,加上这个自动补全的功能的。方便的地方是bash提供的内置命令complete允许你对这个功能进行自定义扩展。 比如
complete -F _my_host my_ssh& 就会指定 my_ssh这个名字的自动完成由 _my_host 这个函数去处理
比如我在 .bashrc 后面加上下面这个代码之后
----------------------------------------------
_my_host() {
&&& local HOST cur
&&& COMPREPLY=()
&&& _get_comp_words_by_ref cur
&&& HOST=&local test test2 devolop&
&&& COMPREPLY=( $( compgen -W &$HOST& -- &$cur& ) )
complete -F _my_host my_ssh
alias egenera_ssh=/home/widebright/桌面/my_ssh.pl
-----------------------------------------------
这样设置之后,在终端再输入自己的自定义命令my_ssh 然后按TAB键,就会自动出来自己预先定义的host主机名字了
---------------
widebright@:~/桌面$ my_ssh&
local test test2 devolop
-------------------------
其中COMPREPLY 是Bash的内置变量,一个数组,返回结果到这里去后,bash就是读取这个变量作为自动完成的匹配组合的。
compgen -W &$HOST& -- &$cur& 命令根据当前的输入&$cur& 返回$HOST中匹配的部分。compgen也是内置命令的。_get_comp_words_by_ref 是预定义函数,不过自己从COMP_WORDS
和COMP_CWORD两个预定义变量中去读取当前输入信息。COMP_WORDS表示当前命令输入参数的单词数组,COMP_CWORD表示当前光标的 位置。参考一个例子
------------------------
&&& local cur prev opts base
&&& COMPREPLY=()
&&& cur=&${COMP_WORDS[COMP_CWORD]}&
&&& prev=&${COMP_WORDS[COMP_CWORD-1]}&
&&& #& The basic options we'll complete.
&&& opts=&console create list&
&&& #& Complete the arguments to some of the basic commands.
&&& case &${prev}& in
&&& console)
&&& &&& local running=$(for x in `xm list --long | grep \(name | grep -v Domain-0 | awk '{ print $2 }' | tr -d
\)`; do echo ${x} ; done )
&&& &&& COMPREPLY=( $(compgen -W &${running}& -- ${cur}) )
&&&&&&&&&&& return 0
&&&&&&&&&&& ;;
&&&&&&& create)
&&& &&& local names=$(for x in `ls -1 /etc/xen/*.cfg`; do echo ${x/\/etc\/xen\//} ; done )
&&& &&& COMPREPLY=( $(compgen -W &${names}& -- ${cur}) )
&&&&&&&&&&& return 0
&&&&&&&&&&& ;;
&&&&&&& *)
&&&&&&& ;;
&& COMPREPLY=($(compgen -W &${opts}& -- ${cur}))&&
&& return 0
complete -F _xm xm
------------------------------------
complete 命令的和预定义的详细说明可以参考bash的文档。
启动complete -p 可以查看bash已经定义的命令的自动完成函数。
现 在有一个叫做“Bash Completion& http://bash-completion.alioth.debian.org/ “的包,已经定义了很多名字的自动完成的处理函数了。只要你 “. /etc/bash_completion”
一下这些就全部可以用了。不过这个应该不用自己作了,我转了ubuntu,都自动配置好了吧。不如在这个/etc/bash_completion.d这 个目录下就还有很多命令的例子,比如:
/etc/bash_completion.d/apache2ctl
------------------------------------------------------
# apache2ctl(1) completion
have apache2ctl && {
_apache2ctl() {
&&& local APWORDS cur
&&& COMPREPLY=()
&&& _get_comp_words_by_ref cur
&&& APWORDS=$(apache2ctl 2&&1 &/dev/null | awk 'NR&2 { print $3; exit }' | \
&&&&&&& tr &|& & &)
&&& COMPREPLY=( $( compgen -W &$APWORDS& -- &$cur& ) )
complete -F _apache2ctl apache2ctl
# Local variables:
# mode: shell-script
# sh-basic-offset: 4
# sh-indent-comment: t
# indent-tabs-mode: nil
# ex: ts=4 sw=4 et filetype=sh
---------------------------------------------------
一个比较ubuntu 14.04可用的例子
root@debian01:/opt/smsc# cat /etc/bash_completion.d/smsc_ctl&
# smsc completion
function_exists()
declare -F $1 & /dev/null
_smsc_ctl_auto_complete() {
local cur cmds
COMPREPLY=()
local cur prev cmds
COMPREPLY=()
cur=${COMP_WORDS[COMP_CWORD]}
prev=${COMP_WORDS[COMP_CWORD-1]}
cmds=&compile status start stop restart clean&
if [ $COMP_CWORD -eq 1 ]; then
COMPREPLY=( $( compgen -W &$cmds& -- &$cur& ) )
elif [ $COMP_CWORD -eq 2 ]; then
smsc_ctl=${COMP_WORDS[0]}
sam_files=`$smsc_ctl ls`
case &$prev& in
COMPREPLY=( $( compgen -W &all $sam_files& -- &$cur& ) )
COMPREPLY=( $( compgen -W &all $sam_files& -- &$cur& ) )
COMPREPLY=( $( compgen -W &all $sam_files& -- &$cur& ) )
complete -r ./smsc_ctl
complete -r smsc_ctl
complete -F _smsc_ctl_auto_complete smsc_ctl
---------------------------
很多时候,自己往系统里面加了一些命令或者程序之后,自己再定义一个“自动完成”的处理给他,会方便很多的吧。
参考文章:
8.6 Programmable Completion
https://www.gnu.org/software/bash/manual/html_node/Programmable-Completion.htmlAn introduction to bash completion:
8.7 Programmable Completion Builtins
https://www.gnu.org/software/bash/manual/html_node/Programmable-Completion-Builtins.html#Programmable-Completion-Builtins
An introduction to bash completion: part 1&& http://www.debian-administration.org/articles/316
http://www.debian-administration.org/article/An_introduction_to_bash_completion_part_2
More on Using the Bash Complete Command&& /content/more-using-bash-complete-command
本文已收录于以下专栏:
相关文章推荐
远程桌面中Tab键不能补全的解决办法 
我们曾在之前的一篇文章中介绍了windows远程连接ubuntu的方法,在成功登陆远程桌面环境之后,发现在终端中Tab键不能自动补齐(但是Ctrl...
Unbuntu 终端中使用Tab键不能自动补全
最近OAI的ENB构建时出现毛病(如图所示),试了很多次均翻车,经过追踪log文件,发现问题出在protobuf-c包。这个包由于更新过才出问题,解决的办法比较简单。
(1)编辑cmake_tar...
不输入命令,直接双击[Tab]键,则会出现linux系统中的所有命令
接在一串指令的第一字的后面,则为命令补全;
接在一串指令的第二字的后面,则为文件补全;
1。sudo apt-get install bash-completion
2。修改/etc/bash.bashrc文件,将
#if [ -f /etc/bash_completion ]; t...
大家在Linux下都用shell的TAB自动补全功能,非常方便,但是有时自己开发程序,可能需要自定义实现TAB自动补全功能,这时可能就会用到complete命令来实现对命令的自定义补全,本文主要介绍c...
在shell命令行可以使用“Tab”键自动补全命令或文件名,这种功能其实可以在shell脚本中实现,使得使用“Tab”键可以自动补全自定义的shell函数,相关命令有三个,compgen、comple...
从fedora18通过ssh登录到服务器上发现不能使用tab补全命令下的命令,google后得知是/etc/passwd文件中的指定的shell应该为bash,而我的为账户为sh,修改后使用tab正常...
查看passwd
cat /ect/passwd
发现root用户的shell是/bin/bash
普通用户的shell是/bin/sh
修改普通用户的为/bin/bash即可
要使用在./ssh/config中配置的ssh别名,只需要將此行加入 .bashrc 最後一行即可.complete -W &$(echo $(grep '^Host ' .ssh/config
他的最新文章
讲师:吴岸城
您举报文章:
举报原因:
原文地址:
原因补充:
(最多只允许输入30个字)}

我要回帖

更多关于 我的世界输入指令没用 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信