Linuxシステムでは、コマンドを入力してTabキーを2回押すと、入力した文字で始まる使用可能なすべてのコマンドが一覧表示されます。これは新しいことではありません、あなたはすでに知っているかもしれません。この機能はコマンドライン補完bash補完と呼ばれます。デフォルトでは、bashコマンドラインは自動的にファイル名またはディレクトリ名を補完できます。しかし、bashコマンド補完機能を強化し、それをcompleteコマンドで新しいレベルに引き上げることができます。
このチュートリアルでは、プログラム可能なコマンド補完を使用して、オプションまたはコマンドライン引数に自動補完を適用する方法を説明します。
例:writeコマンドを入力した後、TABボタンを2回押すと、自動補完機能によって、書き込み操作を実行できるユーザーのリストが表示されます。 $ write [TAB] [TAB]次の例では、telnetコマンドで使用可能なホスト名を表示できます。$ telnet [TAB] [TAB] localhost dev-db Fileserver
端末でプログラマブルコマンド補完機能を動作させるには、次のように/etc /bash_completionを実行するだけです。#。/etc /bash_completion
キャンセルすることもできます。 /etc/bash.bashrc内の次のコメント(Ubuntu Linux 13.04システムから)なので、上記のコマンドを実行する必要はありません。###対話型シェルスクリプトでbash補完を有効にする!shopt -oq posix; thenif [-f /usr /share /bash-completion /bash_completion];次に/usr /share /bash-completion /bash_completionelif [-f /etc /bash_completion];次に/etc /bash_completionfifi
これらが見つからない場合このコードでは、/etc /bash_completionファイルが見つかりませんでした。次に、apt-getコマンドを使用してbash_completionパッケージをインストールするだけです。
1.既存のコマンドライン補完機能の表示
プログラム可能なコマンドライン補完機能を有効にした後、定義済みのコマンド補完機能がすでにいくつかあります。 completeコマンドは、コマンドライン補完を定義するために使用されます。
既存のコマンドライン補完を表示するには、次のようにcompleteコマンドを使用します。
上記の例の-pオプションはオプションです。
2. bashで標準補完機能を一覧表示する。
プログラマー向け開発ツール:プログラミングカッププログラマー向け開発ツール:プログラミングカップ
デフォルトでBash、BashはLinuxユーザーは以下の標準補完機能を提供します。 1.変数補完2.ユーザー名補完3.ホスト名補完4.パス補完5.ファイル名補完
前のbash標準補完でこれらについて説明しました。
3.コマンド名補完の定義
-cオプションを使用すると、使用可能なすべてのコマンドをコマンドの補完パラメータとして使用できます。次の例では、whichコマンド(LCTT)に対して補完が定義されています。TABを2回押すと、すべてのコマンド名を補正可能なパラメータとして一覧表示できます。 $ complete -c which
$ which [TAB] [TAB] 2116の可能性をすべて表示しますか?(yまたはn)
上記のように‘ y’を押すと、すべてが一覧表示されます。コマンド名
4.ディレクトリ補完の定義
オプション-dを使用すると、ディレクトリ名のみを含む補完パラメータを定義できます。次の例では、lsコマンドに補完が定義されています。 $ lscountfiles.sh dir1 /dir2 /dir3 /
$ complete -dls
$ ls [TAB] [TAB] dir1 /dir2 /dir3 /
上記のとおり、 TABを押すとディレクトリ名だけが表示されます。
5.バックグラウンドタスク名の補完を定義します。
Complete関数では、タスク名を補完パラメータとして使用することもできます。オプション-jは、次のようにコマンドに渡されるパラメーターとしてタスク名を定義できます。$ jobs [1] - 停止したcat [2] +停止したsed 'p'
$ complete -j ./list_job_attrib.sh
$ ./list_job_attrib.sh [TAB] [TAB] cat
バックグラウンドタスクについては、Linuxバックグラウンドタスクの例を参照してバックグラウンドタスクの管理方法を学ぶことができます。
6.プレフィックスとサフィックスの補完
補完関数は、実際の補完のためのプレフィックスとサフィックスを定義します。次の例では、補完コンテンツのプレフィックスとサフィックスがlist_job_attrib.shに定義されています。 $ jobs [1] +猫を停止しました -
$ complete -P '">' -S '<"' ./list_job_attrib.sh
$ ./list_job_attrib.sh [ ,null,null,3],TAB] [TAB]
$ ./list_job_attrib.sh> cat<"
7.除外されたファイル名とディレクトリ名の補完付き
もしスクリプトの実行が終了すると、出力ディレクトリは次のようになります。$ cd output /
$ lsall_calls.txt incoming_calls.txt outgoing_calls.txt missed_calls.txtparser_mod.tmp extract.o
上記のように、lsが必要な場合はこのコマンドを実行しても、.tmpファイルと.oファイルは無視されます。$ export FIGNORE = '。tmp:.o'
$ complete -f -d ls
$ cd output
$ ls [TAB] [TAB] all_calls.txt incoming_calls.txt outgoing_calls.txt missed_calls.txt
FIGNOREは、自動補完のために除外する必要があるファイル名の接尾辞を含む環境変数です。
8.完了値を取得するためにIFS変数で文字列を分割する
完了値のリストは-Wオプションで定義してから、IFS環境変数で分割することができます。セグメンテーション結果は変数を拡張してそれを補完として表示します。 $ export IFS =""
$ complete -W"クイックバブル" ./sort_numbers.sh
$ ./sort_numbers.sh [TAB] [TAB]バブルクイック
前述のように、文字列がIFS区切り文字で分割された後、埋め込み変数は変数値に展開されるので、変数は次のように使用できます。$ echo $ SORT_TYPE1bubble
$ echo $ SORT_TYPE2quick
$ complete -W" $ SORT_TYPE1" $ SORT_TYPE2" ./sort_numbers.sh$ ./sort_numbers.sh [TAB] [TAB] bubble quick
9.補数を生成する関数を作成します。 Full
補完を定義する関数を導入することができます。関数名をcompleteコマンドに渡すには、-Fオプションを使用します。このコマンドは、関数を実行して補完を生成します。たとえば、関数は次のようになります。_parser_options(){local curr_arg;
curr_arg = $ {COMP_WORDS [COMP_CWORD]}
COMPREPLY =($(compgen -W '-i --incoming -o - 上記の関数では:1.COMPREPLY:この配列はTABを押した後に表示される結果を制御します2.COMP_WORDS:配列はコマンドを含みます入力単語を並べる3.COMP_CWORD:COMP_WORDS配列のインデックス。これを使用して、コマンドラインがアクセスできる単語の位置を区別します。 parser_optionファイルで、sourceコマンドで紹介します。$ source parser_option
この関数をparser.plスクリプトに関連付けます。$ complete -F _parser_options ./parser.pl
$ ./parser.pl [TAB] [TAB] -i - 着信-o - 発信-m - 失敗
上記のように、parser.plのオプションは_parser_options()関数によって生成されます。
ヒント:プログラム可能な補完機能については、/etc /bash_completionを確認してください。
10.最初のルールで結果が得られない場合は、2番目のルールを使用します。定義された補完ルールで一致が生成されない場合は、-oオプションを使用して補完を生成できます。 $ complete -F _count_files -o dirnames ./countfiles.sh
上記のように、_count_files補完関数は./countfiles.shに対して定義されています。 _count_files()関数が一致を生成しない場合、ディレクトリの完成がトリガされます。 $ ls countfiles.sh dir1 /dir2 /dir3 /
$。/countfiles.sh [TAB] [TAB] dir1 dir2 dir3
バス構造に応じて、バスタイプと非バスタイプに分けることができます。 89C51マイクロコントローラはバス構造であることがよくありますが、89C51マイクロコントローラにはデータバス、アドレスバス、およ
Monoはクロスプラットフォームのオープンソース.NET開発フレームワークです。 SUSE Linuxオペレーティングシステムに基づいてNovellによって開発されたLinuxシステムのサポート。公式
Linuxでのディスクパーティション、ファイルシステムのフォーマットとRAIDデバイス Linuxシステムでのディスクパーティションのフォーマットの比較 Windows ブートディスクを挿入するのは非
lftpはLinux上のftpクライアントで、リモートのFTPサーバーへのログインに使用されます。 mirrorコマンドを使用して、lftpを介してローカルファイルをリモートFTPサーバーにバック