BASHプログラミング
 Computer >> コンピューター >  >> プログラミング >> BASHプログラミング

10 の便利な Linux Bash_Completion コマンドの完全な例 (ステロイドでの Bash コマンド ライン補完)

Linux では、コマンドの入力中に TAB を 2 回押すと、入力した文字で始まるすべての使用可能なコマンドが一覧表示されます。

これは新しいことではありません。おそらく、このことについてはすでにご存知でしょう。この機能は、bash 補完と呼ばれます。基本的なファイル名とディレクトリ名の補完は、デフォルトで bash コマンド ラインで利用できます。

しかし、この bash の完了をターボチャージし、complete コマンドを使用して次のレベルに引き上げることができます。

このチュートリアルでは、プログラム可能な補完を使用して、オプションとコマンドの引数にオートコンプリートを適用する方法について説明します。

たとえば、書き込みコマンドを入力した後にタブを 2 回押すと、オートコンプリートによりユーザーのリストが表示されます。書き込み操作を実行します。

$ write [TAB][TAB]
bala raj
jason randy
john ritu
mayla thomas
nisha www-data

次の例では、telnet コマンドで使用可能なホスト名が表示されます:

$ telnet [TAB][TAB]
localhost dev-db fileserver

端末でプログラム可能な補完を取得するには、以下に示すように /etc/bash_completion を実行するだけです。

# . /etc/bash_completion

上記のコマンドを明示的に実行する必要がないように、/etc/bash.bashrc (ubuntu Linux 13.04 から) の以下の行のコメントを解除することもできます。

<センター>
 enable bash completion in interactive shells
if ! shopt -oq posix; then
 if [ -f /usr/share/bash-completion/bash_completion ]; then
 . /usr/share/bash-completion/bash_completion
 elif [ -f /etc/bash_completion ]; then
 . /etc/bash_completion
 fi
fi

これらの行と /etc/bash_completion ファイルが見つからない場合は、apt-get で bash_completion というパッケージをインストールするだけです

1.既存の bash 補完を表示

プログラム可能な bash 補完を有効にすると、一連の bash 補完が定義されます。コマンド complete は、bash の完了を定義するために使用されます。

既存の bash 補完を表示するには、次に示すように complete コマンドを使用します。

 
complete -p | less

上記の例では、オプション -p はオプションです。

2. Bash の標準補完のリスト

Bash は、デフォルトで Linux ユーザー向けに次の標準補完を提供します。

<オール>
  • 変数名の補完
  • ユーザー名の補完
  • ホスト名の補完
  • パス名補完
  • ファイル名の補完
  • これらについては、以前の bash 標準補完記事で説明しました。

    3.コマンド取得完了の定義

    -c command で補完を定義して、引数として使用可能なコマンドのリストを取得します。次の例では、補完はどのコマンドに対して定義されていますか

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

    上記のように、「y」を押すと、すべてのコマンドが一覧表示されます。

    4.ディレクトリ取得の完了を定義

    オプション d を使用すると、ディレクトリ名のみを引数として取得するように補完を定義できます。次の例では、ls の補完を定義しています。

    $ ls
    countfiles.sh dir1/ dir2/ dir3/
    
    $ complete -d ls
    
    $ ls [TAB][TAB]
    dir1/ dir2/ dir3/

    上記のように、Tab キーを押すと、ディレクトリのみが表示されます。

    5.バックグラウンド ジョブ名を取得するための完了の定義

    complete を使用すると、コマンドの引数としてジョブ名を取得することもできます。以下に示すように、オプション j を使用して、ジョブ名を引数としてコマンド job に渡します。

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

    バックグラウンド ジョブについて言えば、これらの例を使用して Linux バックグラウンド ジョブを管理する方法も知っておく必要があります。

    6.プレフィックスとサフィックスによる補完

    補完は、追加するプレフィックスと実際の補完に追加するサフィックスを使用して定義できます。次の例では、list_job_attrib.sh にプレフィックスとサフィックスが定義されています。

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

    7.除外によるファイル名とディレクトリの補完

    スクリプトの実行が完了し、出力が次のように出力ディレクトリに書き込まれたとします

    $ cd output/
    
    $ ls
    all_calls.txt incoming_calls.txt outgoing_calls.txt missed_calls.txt
    parser_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 "bubble quick" ./sort_numbers.sh
    
    $ ./sort_numbers.sh [TAB][TAB]
    bubble quick

    上記のように、文字列を IFS 区切りで分割した後、単語が展開されるため、以下に示すようにこれらを変数として持つこともできます。

    $ echo $SORT_TYPE1
    bubble
    
    $ echo $SORT_TYPE2
    quick
    
    $ complete -W "$SORT_TYPE1 $SORT_TYPE2" ./sort_numbers.sh
    $ ./sort_numbers.sh [TAB][TAB]
    bubble quick

    9.補完を生成する独自の関数を作成する

    補完を定義する関数を含めることができます。 -F オプションを使用すると、関数名が complete コマンドに渡され、実行されて補完が生成されます。たとえば、関数は次のように記述されます。

    _parser_options()
    {
     local curr_arg;
    
     curr_arg=${COMP_WORDS[COMP_CWORD]}
    
     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 parser_option

    以下に示すように、この関数をパーサー スクリプトにリンクします。

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

    上記のように、パーサーのオプションは関数 _parser_options() によって生成されます。

    注 :/etc/bash_completion を参照して、プログラム可能な補完のその他の関数を確認してください。

    10.プライマリが何も生成しない場合のセカンダリ スペック

    定義された補完仕様によって生成された一致がない場合、-o オプションで指定された補完のために comp-option が使用されます。

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

    上記のように、ファイル ./countfiles.sh に対して _count_files 関数で補完を定義します。 _count_files() 関数が一致を生成しない場合、ディレクトリの補完が試行されます。

    $ ls 
    countfiles.sh dir1/ dir2/ dir3/
    
    $./countfiles.sh [TAB][TAB]
    dir1 dir2 dir3

    1. Linuxで効果的なBashスクリプトを作成するための10の便利なヒント

      シェルスクリプトは、Linuxで学習/実行できるプログラミングの最も簡単な形式です。さらに言えば、タスクを自動化し、ほんの数例を挙げると、新しいシンプルなユーティリティ/ツールを開発するためのシステム管理に必要なスキルです。 この記事では、効果的で信頼性の高いbashスクリプトを作成するための10の便利で実用的なヒントを紹介します。これらには、次のものが含まれます。 1。スクリプトでは常にコメントを使用する これは、シェルスクリプトだけでなく、他のすべての種類のプログラミングにも適用される推奨される方法です。スクリプトにコメントを書くと、あなたや他の誰かがスクリプトを読んで、スクリプトのさ

    2. Linuxでwatchコマンドを使用する方法と例

      Linuxのwatchコマンドは1つのことを行います。コマンドを繰り返し、結果を繰り返し出力して、変更を監視できるようにします。使用方法は次のとおりです。 watchコマンド構文 watchコマンドの構文は次のとおりです。 watch OPTIONS COMMAND 注: オプション 以下の表のオプションのリストである必要があります。これにより、ウォッチのデフォルトの動作が変更されます。 コマンド コマンド 監視するコマンドです 繰り返し実行する必要があります。これは、出力を監視します 見る 中断されるまで実行されます(したがって、 CTRL+Cを押して終了します ) オプション 時