99热99这里只有精品6国产,亚洲中文字幕在线天天更新,在线观看亚洲精品国产福利片 ,久久久久综合网

歡迎加入QQ討論群258996829
麥子學(xué)院 頭像
蘋果6袋
6
麥子學(xué)院

Linux學(xué)習(xí)之命令行自動補全

發(fā)布時間:2016-12-04 19:20  回復(fù):0  查看:2345   最后回復(fù):2016-12-04 19:20  
Linux系統(tǒng) 中,命令行下,輸入字符后,按兩次Tab鍵,shell就會列出以這些字符打頭的所有可用命令。如果只有一個命令匹配到,按一次Tab鍵就自動將這個命令補全。 比如,想更改密碼,但只記得這個命令前幾個字母是pass。這時候,按Tab鍵,shell就自動輸出 passwd 命令,非常方便。
  當(dāng)然,除了命令補全,還有路徑、文件名補全。這個在我們 cd 到特定目錄時特別好用。
  補全命令說明
  自動補全是Bash自帶的一個強大的功能,允許通過編碼指定命令參數(shù)如何補全。通常,補全腳本會放在/etc/bash_completion.d/ 目錄下,方便統(tǒng)一啟用所有補全腳本。
  這里例子的命令為 foo
  # cat /etc/bash_completion.d/foo.bash
  _foo()
  {
  local cur=${COMP_WORDS[COMP_CWORD]}
  COMPREPLY=( $(compgen -W "exec help test" -- $cur) )
  }
  complete -F _foo foo
  如下,測試foo命令是否自動補全
  # chmod +x /etc/bash_completion.d/foo.bash
   # source /etc/bash_completion.d/foo.bash
   # foo [Tab][Tab]
   exec  help  test  
    以上,source是為了這個foo.bash在當(dāng)前會話生效。默認(rèn)情況下,這個補全腳本不會被執(zhí)行到,也就是說,補全命令未激活。需要source激活這個腳本,就可以沒有顧慮地使用了。
  為了避免每次都要source一次,可以在bashrc加上這個命令。
  bashrc全局配置在不同 linux 發(fā)行版可能位置不同,如下:
  Centos     /etc/bashrc
  Ubuntu    /etc/bash.bashrc
 ?。ㄈ绻辉诋?dāng)前帳號生效,只要配置 ~/.bashrc 即可)
  在bashrc文件末尾加上 source /etc/bash_completion.d/foo.bash,這樣,每次登錄到linux后,就會激活這個補全腳本。
  補全命令詳解
  前面給大家演示的例子,用到兩個命令complete和compgen,下面分別介紹這兩個命令。
  complete (補全命令)
  這是命令補全最核心的命令了,來看下這個命令的參數(shù)說明。
  # help complete
    complete: complete [-abcdefgjksuv] [-pr] [-DE] [-o option] [-A action] [-G globpat] [-W wordlist]  [-F function] [-C command] [-X filterpat] [-P prefix] [-S suffix] [name ...]
  重點說明:
  -F function執(zhí)行shell 函數(shù),函數(shù)中生成COMPREPLY作為候選的補全結(jié)果
  -C command將 command 命令的執(zhí)行結(jié)果作為候選的補全 結(jié)果
  -G pattern將匹配 pattern的文件名作為候選的補全結(jié)果
  -W wordlist分割 wordlist 中的單詞,作為候選的補全結(jié)果
  -p [name]列出當(dāng)前所有的補全命令
  -r [name]刪除某個補全命令
  演示下:
  # complete -W 'word1 word2 word3 test' foo
  # foo w
  # foo word
  # complete -pcomplete -W 'word1 word2 word3 test' foocomplete -o filenames -F __udisks udisks
  # complete -r foo
  # complete -pcomplete -o filenames -F __udisks udisks
  compgen(篩選命令)
  這個命令,用來篩選生成 匹配單詞的 候選補全結(jié)果
  # help compgencompgen: compgen [-abcdefgjksuv] [-o option] [-A action] [-G globpat] [-W wordlist] [-F function] [-C command] [-X filterpat] [-P prefix] [-S suffix] [word]
  重點說明:
  -W wordlist分割 wordlist 中的單詞,生成候選補全列表
  # compgen -W 'word1 word2 test' word1
  word2
  test# compgen -W 'word1 word2 test' word
  word1
  word2
  compopt(修改補全命令設(shè)置)
  這個命令可以修改補全命令設(shè)置,注意了,這個命令必須在補全函數(shù)中使用,否則會報錯。
  # help compoptcompopt: compopt [-o|+o option] [-DE] [name ...]
  重點說明:
  +o option啟用 option 配置
  -o option棄用 option 配置
  例如,設(shè)置命令補全后不要多加空格,方法如下:
  compopt -o nospace
  內(nèi)置補全變量
  除了上面三個命令外,Bash還有幾個內(nèi)置變量來輔助補全功能,如下:
  COMP_WORDS類型為數(shù)組,存放當(dāng)前命令行中輸入的所有單詞
  COMP_CWORD類型為整數(shù),當(dāng)前輸入的單詞在COMP_WORDS中的索引
  COMPREPLY類型為數(shù)組,候選的補全結(jié)果
  COMP_WORDBREAKS類型為字符串,表示單詞之間的分隔符
  COMP_LINE類型為字符串,表示當(dāng)前的命令行輸入字符
  COMP_POINT類型為整數(shù),表示光標(biāo)在當(dāng)前命令行的哪個位置
  命令行補全實例
  下面再結(jié)合前面三個補全命令(complete/compgen/compopt)和內(nèi)置變量,寫了例子說明下。
  # cat /etc/bash_completion.d/foo.bash _foo()
  {
  COMPREPLY=()
  local cur=${COMP_WORDS[COMP_CWORD]};
  local cmd=${COMP_WORDS[COMP_CWORD-1]};
  case $cmd in
  'foo')
  COMPREPLY=( $(compgen -W 'help test read' -- $cur) ) ;;
  'test')
  local pro=( $(awk '{print $1}' /data/a.txt) )
  COMPREPLY=( $(compgen -W '${pro[@]}' -- $cur) ) ;;
  '*')
  ;;
  esac
  if [[ "${COMP_WORDS[1]}" == "read" && ${COMP_CWORD} -eq 2 ]]; then
  local pro=($(pwd))
  cd /data
  compopt -o nospace
  COMPREPLY=($(compgen -d -f -- $cur))
  cd $pro
  fi
  return 0
  }
  complete -F _foo foo
  例子中, foo有3個參數(shù),分別是 help, read, test
  read 測試遍歷 /data 目錄下所有文件
  test 測試從文件中提取2級參數(shù)
  現(xiàn)在跑下這個例子:
  # mkdir /data# touch /data/a.txt# touch /data/b.txt# tree /data
  /data
  ├── a.txt
  └── b.txt
    0 directories, 2 files
    # source /etc/bash_completion.d/foo.bash 
    # foo [Tab][Tab]
    help  read  test  
    # echo world1 >> /data/a.txt
    # echo world2 >> /data/a.txt
    # foo test world[Tab][Tab]
    world1  world2  
# foo read[Tab][Tab]
a.txt  b.txt


來源:CSDN
您還未登錄,請先登錄

熱門帖子

最新帖子

?