自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

Linux中10個有用的命令行補齊命令

系統(tǒng) Linux
在Linux系統(tǒng)中,輸入一個命令,再按兩次TAB鍵,就會列出所有以輸入字符開頭的可用命令。這并不新鮮,很可能你已經(jīng)知道了這個。這個功能被稱作命令補全。本文詳細說明了使用可編程的命令行補全功能把自動補全的功能應(yīng)用于選項或者命令行參數(shù)。

在Linux系統(tǒng)中,輸入一個命令,再按兩次TAB鍵,就會列出所有以輸入字符開頭的可用命令。這并不新鮮,很可能你已經(jīng)知道了這個。這個功能被稱作命令補全。默認情況下,bash命令行可以自動補全文件或目錄名稱。不過,我們可以使bash命令行補全執(zhí)行更多的操作,通過補全命令可以讓它成就下一個輝煌。

這個教程說明了我們是怎樣使用可編程的命令行補全功能(programmable completion)把自動補全的功能應(yīng)用于選項或者命令行參數(shù)。

例如:在輸入write 命令之后,如果你按兩次TAB按鍵,自動補全功能會提供執(zhí)行write操作的列表。

  1. $ write [TAB][TAB] 
  2. bala      raj 
  3. jason     randy 
  4. john      ritu 
  5. mayla     thomas 
  6. nisha     www-data 

在下面的例子中,輸入telnet命令將會顯示可用了主機名:

  1. $ telnet [TAB][TAB] 
  2. localhost  dev-db  fileserver 

要讓可編程命令補全功能在你的終端起作用 ,你只需要執(zhí)行/etc/bash_completion即可,就像下面展示出來的操作:

  1. # . /etc/bash_completion 

你也可以取消/etc/bash.bashrc(對于Ubuntu Linux 13.04系統(tǒng))下面的注釋,這樣,你就可以不需要執(zhí)行上面的命令了,

  1. enable bash completion in interactive shells 
  2. if ! shopt -oq posix; then 
  3. if [ -f /usr/share/bash-completion/bash_completion ]; then 
  4. . /usr/share/bash-completion/bash_completion 
  5. elif [ -f /etc/bash_completion ]; then 
  6. . /etc/bash_completion 
  7. fi 
  8. fi 

如果你沒有發(fā)現(xiàn)這些代碼,也沒有找到/etc/bash_completion文件,那么你只需要通過使用apt-get命令來安裝bash_completion 包即可。

1、查看現(xiàn)有的bash補全命令

啟用可編程的bash命令行補全功能,就可以定義一套bash補全命令。命令行補全可以用來定義bash補全命令。

來看一下現(xiàn)有的bash補全功能,使用完整的命令,如下:

  1. complete -p | less 

選項 -p 是可選擇的。

2、Bash中標準補全的列表

Bash為linux用戶默認提供了下面的標準補全命令。

  • 變量名補全(Variablename completion)
  • 用戶名補全(Username completion)
  • 主機名補全(Hostname completion)
  • Path路徑補全(Pathname completion)
  • 文件名補全(Filename completion)

我們已經(jīng)在更早的一篇文章bash standard completion 中討論了這些。

3、為獲取命令定義補全命令

使用-c參數(shù)定義一個補全命令來獲得可使用的命令列表。在下面的例子中,為which命令定義了補全命令,

  1. $ complete -c which 
  2. $ which [TAB][TAB] 
  3. Display all 2116 possibilities? (y or n) 

就像上面看到的,如果按”y”,所有的命令都會顯示出來。

4、為獲得目錄定義補全命令

使用參數(shù)d,定義一個只獲得目錄名稱的補全命令,下面的例子中,定義了ls的補全命令

  1. $ ls 
  2. countfiles.sh  dir1/          dir2/          dir3/ 
  3. $ complete -d ls 
  4. $ ls [TAB][TAB] 
  5. dir1/          dir2/          dir3/ 

就像上面看到的,連續(xù)按兩次TAB,就可以看到目錄名稱。

5、為獲得后臺作業(yè)名稱獲得補全命令

通過使用complete命令,把獲得job名稱作為參數(shù)是允許的。參數(shù)j用來把job名稱作為參數(shù)傳到命令行,展示如下:

  1. $ jobs 
  2. [1]-  Stopped                 cat 
  3. [2]+  Stopped                 sed 'p' 
  4. $ complete -j ./list_job_attrib.sh 
  5. $ ./list_job_attrib.sh [TAB][TAB] 
  6. cat   sed 

想要了解更多的后臺任務(wù),可以通過這些案例來了解下如何管理Linux 后臺任務(wù)。

6、使用前綴和后綴補全命令

補全命令可以通過被前綴(在后面添加)和后綴(添加在后面)來定義。在下面的例子中,前綴和后綴在list_job_attrib.sh中被定義。

  1. $ jobs 
  2. [1]+  Stopped                 cat 
  3. $ complete -P '">' -S '<"' ./list_job_attrib.sh 
  4. $ ./list_job_attrib.sh [TAB][TAB] 
  5. $ ./list_job_attrib.sh ">cat<

7、具有排除功能的文件名和目錄補全

看看下面的腳本,輸出output 目錄下面的文件:

  1. $ cd output/ 
  2. $ ls 
  3. all_calls.txt   incoming_calls.txt   outgoing_calls.txt   missed_calls.txt 
  4. parser_mod.tmp  extract.o 

在上面的例子中,如果你想要排除以.tmp和.o為后綴的文件,實現(xiàn)ls命令的自動補全功能,可以這樣:

  1. $ export FIGNORE='.tmp:.o' 
  2. $ complete -f -d ls 
  3. $ cd output 
  4. $ ls [TAB][TAB] 
  5. all_calls.txt   incoming_calls.txt   outgoing_calls.txt   missed_calls.txt 

FIGNORE 是一個shell變量,它包含了排除在自動補全隊列中的文件的文件名的后綴。

8、通過IFS變量分割String字符串,得到被分割后的值。

單詞表可以通過使用w參數(shù)被IFS 變量中定義的字符串分割成多個單詞。最終每個單詞都會被分開,被顯示出來。

  1. $ export IFS=" " 
  2. $ complete -W "bubble quick" ./sort_numbers.sh 
  3. $ ./sort_numbers.sh [TAB][TAB] 
  4. bubble   quick 

如上所述,被IFS分割之后,單詞就會被擴展開,所以也可能有下面展示的這些變量。

  1. $ echo $SORT_TYPE1 
  2. bubble 
  3. $ echo $SORT_TYPE2 
  4. quick 
  5. $ complete -W "$SORT_TYPE1 $SORT_TYPE2" ./sort_numbers.sh 
  6. $ ./sort_numbers.sh [TAB][TAB] 
  7. bubble   quick 

9、編寫你自己的函數(shù)以實現(xiàn)自動補全功能

你可以聲明一個函數(shù)來定義補全功能。使用 -F 參數(shù),被傳入到補全命令的函數(shù)名,可以執(zhí)行并。例如,函數(shù)可以寫成下面的樣式。

  1. _parser_options() 
  2. local curr_arg; 
  3. curr_arg=${COMP_WORDS[COMP_CWORD]} 
  4. COMPREPLY=( $(compgen -W '-i --incoming -o --outgoing -m --missed' -- $curr_arg ) ); 

在上面的函數(shù)中,

COMPREPLY :存儲在按下[TAB][TAB]之后打印信息的數(shù)組。

COMP_WORDS :在命令行輸入的單詞數(shù)組

COMP_CWORD :COMP_WORDS 數(shù)組的索引,可以訪問命令行中不用位置的單詞。

compgen :使用-W參數(shù),持有current_arg變量中盡可能完整的、分開的內(nèi)容。

文件中parser_option 函數(shù)通過source執(zhí)行如下:

  1. $ source parser_option 

這個函數(shù)鏈接到腳本解析器如下:

  1. $ complete -F _parser_options ./parser.pl 
  2. $ ./parser.pl [TAB][TAB] 
  3. -i       --incoming       -o       --outgoing       -m       --missed 

就像上面所看到的,解析器的參數(shù)可以通過_parser_options函數(shù)生成。

注意:查看/etc/bash_completion文件,了解更多的可編程的命令行補全功能函數(shù)。

10、當?shù)谝灰?guī)范沒有進行匹配時,就需要執(zhí)行第二規(guī)范

通過定義的補全規(guī)范,沒有進行匹配,那么通過-o參數(shù)定義的completion 就會執(zhí)行。

  1. $ complete -F _count_files -o dirnames ./countfiles.sh 

同上,通過使用_count_files 文件中定義的_count_files 函數(shù)定義的completion ,如果_count_files函數(shù)沒有進行匹配,那么就會執(zhí)行目錄補全。

  1. $ ls 
  2. countfiles.sh    dir1/      dir2/      dir3/ 
  3. $./countfiles.sh [TAB][TAB] 
  4. dir1    dir2    dir3 

原文鏈接: Balakrishnan Mariyappan 翻譯: 極客范 踏雁尋花

譯文鏈接: http://www.geekfan.net/8169/

責任編輯:黃丹 來源: 極客范
相關(guān)推薦

2015-10-08 09:01:51

2015-09-28 11:22:55

命令行補全Linux

2015-09-29 16:03:43

2022-01-14 07:28:20

Linux 命令行組合

2022-03-20 07:07:23

MySQL數(shù)據(jù)庫命令行工具

2019-09-09 15:43:29

UnixLinux命令行

2012-07-11 13:35:25

UnixLinux

2009-12-23 14:14:09

Linux高級命令行

2009-12-09 09:25:52

Linux命令行svn命令

2010-09-01 14:23:54

Linux命令行開發(fā)

2009-12-24 14:51:39

Linux命令行

2015-07-29 10:34:50

Linux系統(tǒng)命令行工具

2015-07-30 11:04:08

Linux命令行工具

2015-07-30 11:24:47

Linux 系統(tǒng)命令行工具

2015-06-16 10:36:45

Linux命令行

2017-08-30 19:11:38

Linux命令行tab

2010-10-12 17:29:22

MySQL命令行

2015-05-25 10:40:22

Linux命令行技巧

2020-03-30 12:57:50

Linux命令行Markdown

2010-08-24 09:10:14

Linux命令行工具
點贊
收藏

51CTO技術(shù)棧公眾號