特定のコマンドにカスタムオートコンプリートを指定する方法は?


25

ダブルタブで表示するものをbashに正確に知らせる方法はありますか?たとえばscpy、2つの引数が必要なpythonスクリプトがあります。たとえばapt-get、ダブルタブを使用すると、

autoclean build-dep clean dselect-upgradeパージソースのアップグレード
autoremove check dist-upgrade install remove update  

あなた自身のスクリプト/プログラムのためにそれを行う方法はありますか?Pythonスクリプトをbashスクリプトでラップする必要がありますか?

回答:


31

これを行う最も簡単な方法は、シェルスクリプトをに含めること/etc/bash_completion.d/です。このファイルの基本構造は、完了を実行し、次に呼び出しがcompletebash組み込みである単純な関数です。使用方法について詳しく説明するのではなくcomplete、「Bash Completionの概要」を読むことをお勧めします。第1部では基本を、第2部では補完スクリプトの記述方法について説明します。

bash完了の詳細な説明は、「Programmable Completion」セクションにありman bashます(「/ Programmable Completion」と入力し、「n」を数回押すとすぐに表示されます。または、運がよければ「g 2140 RETURN」)。


8

ここに基本的なガイドがあります。

オートコンプリートを機能させたいadmin.shというスクリプトの例を見てみましょう。

#!/bin/bash

while [ $# -gt 0 ]; do
  arg=$1
  case $arg in
    option_1)
     # do_option_1
    ;;
    option_2)
     # do_option_1
    ;;
    shortlist)
      echo option_1 option_2 shortlist
    ;;
    *)
     echo Wrong option
    ;;
  esac
  shift
done

オプションの候補リストに注意してください。このオプションを使用してスクリプトを呼び出すと、このスクリプトで使用可能なすべてのオプションが出力されます。

そして、ここにオートコンプリートスクリプトがあります。

_script()
{
  _script_commands=$(/path/to/your/script.sh shortlist)

  local cur prev
  COMPREPLY=()
  cur="${COMP_WORDS[COMP_CWORD]}"
  COMPREPLY=( $(compgen -W "${_script_commands}" -- ${cur}) )

  return 0
}
complete -o nospace -F _script ./admin.sh

完了する最後の引数は、オートコンプリートを追加するスクリプトの名前です。必要なことは、オートコンプリートスクリプトをbashrcに次のように追加することだけです。

source /path/to/your/autocomplete.sh

または/etc/bash.completion.dにコピーします

ソース:https : //askubuntu.com/a/483149/24155


3
「完全なチュートリアル」は、これを説明するために使用するフレーズではありません...
searchengine27
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.