溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點(diǎn)擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

Linux怎么實(shí)現(xiàn)自動(dòng)補(bǔ)全命令

發(fā)布時(shí)間:2022-01-26 15:53:39 來源:億速云 閱讀:1335 作者:iii 欄目:開發(fā)技術(shù)

這篇文章主要介紹“Linux怎么實(shí)現(xiàn)自動(dòng)補(bǔ)全命令”的相關(guān)知識(shí),小編通過實(shí)際案例向大家展示操作過程,操作方法簡單快捷,實(shí)用性強(qiáng),希望這篇“Linux怎么實(shí)現(xiàn)自動(dòng)補(bǔ)全命令”文章能幫助大家解決問題。

linux命令自動(dòng)補(bǔ)全

centos7下執(zhí)行yum install bash-completion之后重啟系統(tǒng)正常。

docker命令自動(dòng)補(bǔ)全

yum install docker后,會(huì)有一個(gè)文件: /usr/share/bash-completion/completions/docker ; 顯然,該腳本是用于bash自動(dòng)補(bǔ)全的,但是,直接 source 執(zhí)行該腳本后,docker命令后敲tab,會(huì)有錯(cuò)誤。

 yum install -y bash-completion后就可以解決。

kubectl命令自動(dòng)補(bǔ)全

kubectl這個(gè)命令行工具非常重要,與之相關(guān)的命令也很多,我們也記不住那么多的命令,而且也會(huì)經(jīng)常寫錯(cuò),所以命令自動(dòng)補(bǔ)全是非常有必要的,kubectl命令行工具本身就支持complication,只需要簡單的設(shè)置下就可以了。以下是linux系統(tǒng)的設(shè)置命令:

 source > ~/.bashrc

python shell自動(dòng)命令補(bǔ)全

  1. 創(chuàng)建文件 .pythonrc, 添加如下內(nèi)容

     import rlcompleter, readline
     
     readline.parse_and_bind('tab:complete')
  2. 在 .bashrc 文件尾追加如下內(nèi)容

      export PYTHONSTARTUP=~/.pythonrc
  3. 更新環(huán)境變量 source ./.bashrc

shell命令補(bǔ)全

在shell命令行可以使用“Tab”鍵自動(dòng)補(bǔ)全命令或文件名,這種功能其實(shí)可以在shell腳本中實(shí)現(xiàn),使得使用“Tab”鍵可以自動(dòng)補(bǔ)全自定義的shell函數(shù),相關(guān)命令有三個(gè),compgen、complete和compopt。

1、compgen

 compgen [option] [word]

compgen命令根據(jù)option生成與word可能匹配的補(bǔ)全,并打印到標(biāo)準(zhǔn)輸出中,這些選項(xiàng)可以是內(nèi)建命令complete所支持的任何選項(xiàng),但不能是“-p”和“-r”,如果使用了“-F”或“-C”,則由可編程補(bǔ)全功能設(shè)置的各個(gè)shell變量雖然仍可以使用,但它們的值卻沒什么作用。補(bǔ)全條目以相同的方式生成,就好像可編程補(bǔ)全代碼用相同的補(bǔ)全選項(xiàng)直接生成了補(bǔ)全條目一樣,如果指定了word,則只顯示與之匹配的條目。

2、complete

 complete [-abcdefgjksuv] [-o comp-option] [-DE] [-A action] [-G globpat] [-W wordlist] [-F function] [-C command] [-X filterpat] [-P prefix] [-S suffix] name [name ...]
 
 complete -pr [-DE] [name ...]

complete命令指定如何對各個(gè)名稱進(jìn)行補(bǔ)全。如果指定了選項(xiàng)“-p”或者沒有指定任何選項(xiàng),則把已有的補(bǔ)全方法用一種可以重新作為作為輸入的格式打印出來。選項(xiàng)“-r”用以刪除指定名稱的補(bǔ)全方法,不指定名稱時(shí)刪除所有的名稱的補(bǔ)全方法。選項(xiàng)“-D”的意思是其后的選項(xiàng)和動(dòng)作將應(yīng)用到默認(rèn)命令補(bǔ)全,也就是說之前未定義的補(bǔ)全命令也可以補(bǔ)全。選項(xiàng)“-E”的意思是其后的選項(xiàng)和動(dòng)作將應(yīng)用到空命令補(bǔ)全,也就是說補(bǔ)全空白行。對于選項(xiàng)“-G”、“-W”、“-X”、“-P”和“-S”,應(yīng)該使用括號(hào)進(jìn)行保護(hù),防止補(bǔ)全開始前被擴(kuò)展。

“-o bashdefault”:如果沒有生成補(bǔ)全條目,就使用bash默認(rèn)的其它補(bǔ)全。 

“-o default”:如果沒有生成補(bǔ)全條目,就使用“readline”默認(rèn)的文件名補(bǔ)全。 

“-o dirnames”:如果沒有生成補(bǔ)全條目,就進(jìn)行目錄名補(bǔ)全。 

“-o filenames”:告訴“readline”生成文件名,以便進(jìn)行與文件名相關(guān)的處理,例如在目錄名后面加上斜杠,引用特殊字符,去掉行尾的空格,目的是用于shell函數(shù)。 

“-o noquote”:告訴“readline”不引用文件名,默認(rèn)會(huì)進(jìn)行引用。 

“-o nospace”:告訴“readline”在補(bǔ)全的名稱后不添加空格,默認(rèn)添加空格。 

“-o plusdirs”:生成補(bǔ)全條目之后,還會(huì)進(jìn)行目錄名補(bǔ)全并把結(jié)果添加到其它動(dòng)作得到的結(jié)果中。 

“-A alias”:別名,同選項(xiàng)“-a”。 “-A arrayvar”:數(shù)組變量名。 “-A binding”:“readline”鍵綁定名。 

“-A builtin”:shell內(nèi)建命令名,同選項(xiàng)“-b”。 

“-A command”:命令名,同選項(xiàng)“-c”。 

“-A directory”:目錄名,同選項(xiàng)“-d”。

“-A disabled”:不可用的shell內(nèi)建命令名。 

“-A enabled”:可用的shell內(nèi)建命令名。 

“-A export”:導(dǎo)出的shell變量名,同選項(xiàng)“-e”。 

“-A file”:文件名,同選項(xiàng)“-f”。

“-A function”:shell函數(shù)名。 

“-A group”:組名,同選項(xiàng)“-g”。 

“-A helptopic”:內(nèi)建命令help支持的幫助主題。 

“-A hostname”:主機(jī)名,從shell環(huán)境變量HOSTFILE中獲取。

“-A job”:作業(yè)名,同選項(xiàng)“-j”。 

“-A keyword”:shell保留字,同選項(xiàng)“-k”。 

“-A running”:正在運(yùn)行的作業(yè)名。 

“-A service”:服務(wù)名,同選項(xiàng)“-s”。

“-A setopt”:內(nèi)建命令set的選項(xiàng)“-o”可用的參數(shù)。 

“-A shopt”:內(nèi)建命令shopt可接受的選項(xiàng)名。 

“-A signal”:信號(hào)名。 

“-A stopped”:暫停的作業(yè)名。 

“-A user”:用戶名,同選項(xiàng)“-u”。

“-A variable”:所有的shell變量名,同選項(xiàng)“-v”。 

“-C command”:在子shell中執(zhí)行命令,并把其結(jié)果作為補(bǔ)全條目。 

“-F function”:在當(dāng)前的shell環(huán)境中執(zhí)行函數(shù)function,執(zhí)行時(shí),參數(shù)“$1”表示那個(gè)參數(shù)正在進(jìn)行補(bǔ)全的命令名,參數(shù)“$2”表示補(bǔ)全的名稱,參數(shù)“$3”表示補(bǔ)全的名稱前面的單詞,表示結(jié)束執(zhí)行時(shí),從數(shù)組變量COMPREPLY中獲取補(bǔ)全條目。 “-G globpat”:使用文件名擴(kuò)展模式globpat進(jìn)行擴(kuò)展以生成可能的補(bǔ)全條目。 

“-P prefix”:在所有的選項(xiàng)應(yīng)用到補(bǔ)全結(jié)果后,在結(jié)果前添加前綴prefix。 

“-S suffix”:在所有的選項(xiàng)應(yīng)用到補(bǔ)全結(jié)果后,在結(jié)果后添加后綴suffix。 

“-W wordlist”:使用特殊變量IFS中的字符拆分單詞列表wordlist,并擴(kuò)展拆分后的每個(gè)單詞,結(jié)果中與待補(bǔ)全單詞 匹配的條目就是補(bǔ)全條目。 

“-X filterpat”:filterpat是進(jìn)行文件名擴(kuò)展時(shí)使用的模式,它作用于通過前面的選項(xiàng)和參數(shù)生成的補(bǔ)全列表,并把每個(gè)與過濾模式匹配的條目刪除,模式中前導(dǎo)的嘆號(hào)表示否定,這時(shí)會(huì)刪除與過濾模式不匹配的條目。

3、compopt

 compopt [-o option] [-DE] [+o option] [name]

compopt命令修改每個(gè)名稱指定的補(bǔ)全選項(xiàng),如果沒有指定名稱則修改當(dāng)前執(zhí)行的補(bǔ)全的選項(xiàng),如果也沒有指定選項(xiàng),則顯示每個(gè)名稱或當(dāng)前補(bǔ)全所用的選項(xiàng)。選項(xiàng)可能的取值就是上面的內(nèi)建命令complete的有效選項(xiàng)。

4、相關(guān)變量

除了命令compgen、complete和compopt之外,shell命令行自動(dòng)補(bǔ)全還要用到一些shell自帶的變量,如下。

COMP_CWORD:在包含當(dāng)前光標(biāo)位置的單詞“${COMP_WORDS}”中的下標(biāo),這個(gè)變量只能在可編程補(bǔ)全的shell函數(shù)中使用。 COMP_LINE:當(dāng)前命令行,這個(gè)變量只能在可編程補(bǔ)全的shell函數(shù)中使用。 

COMP_POINT:當(dāng)前光標(biāo)位置相對于當(dāng)前命令行開頭的下標(biāo),如果當(dāng)前光標(biāo)位置在當(dāng)前命令行的尾部,則這個(gè)變量的值就與“${#COMP_LINE}”相同,這個(gè)變量只能在可編程補(bǔ)全的shell函數(shù)中使用。 

COMP_TYPE:一個(gè)整數(shù)值,與觸發(fā)調(diào)用補(bǔ)全函數(shù)時(shí)試圖進(jìn)行補(bǔ)全的類型相對應(yīng),正常補(bǔ)全為“TAB”,連續(xù)輸入制表符后的補(bǔ)全列表為“?”,列出其它部分補(bǔ)全條目為“!”,沒有修改單詞而列出補(bǔ)全條目為“@”,補(bǔ)全菜單為“%”,這個(gè)變量只能在可編程補(bǔ)全的shell函數(shù)中使用。 

COMP_KEY:觸發(fā)當(dāng)前補(bǔ)全函數(shù)的鍵,或鍵序列中的最后一個(gè)鍵。 

COMP_WORDBREAKS:“readline”庫進(jìn)行單詞補(bǔ)全時(shí)用作單詞分隔的字符,如果沒有設(shè)置這個(gè)變量,即使以后進(jìn)行重置,它也會(huì)失去特殊作用。

 COMP_WORDS:一個(gè)數(shù)組變量,包含當(dāng)前命令行的每個(gè)單詞,與“readline”一樣當(dāng)前行被COMP_WORDBREAKS拆分成單詞,這個(gè)變量只能在可編程補(bǔ)全的shell函數(shù)中使用。 

COMPREPLY:一個(gè)數(shù)組變量,bash從這個(gè)變量中讀取可編程補(bǔ)全所調(diào)用的shell函數(shù)生成的補(bǔ)全條目。

5、例子

測試腳本如下:

 function autotab() {
 
     echo "function autotab called $@"
 
 }
 
 autotab_list=("aa" "bb" "cc" "dd" "123")
 
 function _autotab() {
 
     local cur
 
     COMPREPLY=()
 
     cur="${COMP_WORDS[COMP_CWORD]}"
 
     COMPREPLY=( $(compgen -W "${autotab_list[*]}" -- ${cur}) )
 
     return 0
 
 }
 
 complete -F _autotab autotab

例子中,在shell命令行執(zhí)行命令autotab時(shí),如果命令未輸完,按下Tab鍵就會(huì)補(bǔ)全這個(gè)命令,而且還會(huì)顯示或補(bǔ)全一些參數(shù),這些都是通過命令complete及函數(shù)_autotab完成的,數(shù)組autotab_list的各元素?cái)U(kuò)展為命令的參數(shù)。

關(guān)于“Linux怎么實(shí)現(xiàn)自動(dòng)補(bǔ)全命令”的內(nèi)容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業(yè)相關(guān)的知識(shí),可以關(guān)注億速云行業(yè)資訊頻道,小編每天都會(huì)為大家更新不同的知識(shí)點(diǎn)。

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI