成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

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

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

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

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

例如:在輸入write 命令之后,如果你按兩次TAB按鍵,自動補全功能會提供執行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 

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

  1. # . /etc/bash_completion 

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

  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 

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

1、查看現有的bash補全命令

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

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

  1. complete -p | less 

選項 -p 是可選擇的。

2、Bash中標準補全的列表

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

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

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

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

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

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

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

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

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

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

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

5、為獲得后臺作業名稱獲得補全命令

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

  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 

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

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為后綴的文件,實現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參數被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、編寫你自己的函數以實現自動補全功能

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

  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 ) ); 

在上面的函數中,

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

COMP_WORDS :在命令行輸入的單詞數組

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

compgen :使用-W參數,持有current_arg變量中盡可能完整的、分開的內容。

文件中parser_option 函數通過source執行如下:

  1. $ source parser_option 

這個函數鏈接到腳本解析器如下:

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

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

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

10、當第一規范沒有進行匹配時,就需要執行第二規范

通過定義的補全規范,沒有進行匹配,那么通過-o參數定義的completion 就會執行。

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

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

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

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

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

責任編輯:黃丹 來源: 極客范
相關推薦

2015-10-08 09:01:51

2015-09-28 11:22:55

命令行補全Linux

2022-01-14 07:28:20

Linux 命令行組合

2015-09-29 16:03:43

2022-03-20 07:07:23

MySQL數據庫命令行工具

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-10-12 17:29:22

MySQL命令行

2010-09-01 14:23:54

Linux命令行開發

2009-12-24 14:51:39

Linux命令行

2015-06-16 10:36:45

Linux命令行

2015-07-29 10:34:50

Linux系統命令行工具

2015-07-30 11:04:08

Linux命令行工具

2015-07-30 11:24:47

Linux 系統命令行工具

2017-08-30 19:11:38

Linux命令行tab

2015-05-25 10:40:22

Linux命令行技巧

2014-02-18 10:45:48

2014-04-09 11:05:11

點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 国产成人免费视频网站视频社区 | 最新伦理片 | 日韩在线一区二区 | 高清人人天天夜夜曰狠狠狠狠 | 亚洲天堂中文字幕 | 黄色一级大片在线免费看产 | 欧美一区不卡 | 日韩成人在线一区 | 精品视频一区二区三区在线观看 | 久产久精国产品 | 精品一二三区视频 | 青草青草久热精品视频在线观看 | 国产一区二区三区 | 精品久久影院 | 国产欧美日韩精品一区 | 亚洲高清一区二区三区 | 久久午夜精品 | 伊人久久精品 | 成人免费影院 | 91视频正在播放 | 久久久久久免费毛片精品 | 91在线看| 成人精品国产一区二区4080 | 在线一区二区三区 | 天天操夜夜操免费视频 | 国产japanhdxxxx麻豆 | 欧美性猛片aaaaaaa做受 | 中文久久| 久久国产日韩欧美 | 天天操天天射综合网 | 亚洲精品视频二区 | 精品久久久久久久久久久下田 | 91久久久久久久久 | 久久久久国产 | 成人久久久 | av手机在线免费观看 | 99久久免费精品国产免费高清 | 狠狠色综合欧美激情 | 三级黄色网址 | 国产精品久久久久久久久久久久 | 久在线|