特定のコマンドに対してカスタムオートコンプリートをどのように指定しますか?

特定のコマンドに対してカスタムオートコンプリートをどのように指定しますか?

ラベルをダブルクリックしたときに表示する内容を bash に正確に通知する方法はありますか?たとえば、scpy複数のパラメータを使用するPythonスクリプトがあります。たとえば、ダブルapt-getクリックすると次のようになります。

autoclean build-dep clean dselect-upgrade ソースアップグレードのクリア
自動削除の確認 dist-upgrade install アップデートの削除  

自分のスクリプト/プログラムに対してこれを行う方法はありますか? pythonスクリプトをbashスクリプトにラップする必要がありますか?

答え1

最も簡単な方法はシェルスクリプトを含めることです/etc/bash_completion.d/。ファイルの基本構造はcompletebash 組み込み関数を実行して呼び出す単純な関数です。complete使用方法について詳しく説明するのではなく、次の内容をお読みください。Bash 完成について。パート1では基本を説明し、パート2では完成スクリプトを作成する方法を示します。

Bashの完了の詳細については、「プログラム可能な完了」セクションにあります。man bash(「/プログラム可能完了」と入力してから「n」を数回押すとすばやく移動できます。運が良ければ「g」と入力してください。)2140

答え2

基本案内です。

admin.shオートコンプリート機能を呼び出すスクリプトの例を見てみましょう。

#!/usr/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

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

autocomplete.shスクリプトは次のとおりです。

#!/usr/bin/bash

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

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

complete -o nospace -F _script /path/to/your/admin.sh

完了する最後のパラメータは、オートコンプリート機能を追加するスクリプトの名前です。あなたがする必要があるのは、オートコンプリートスクリプトを~/.bashrc次のよう/etc/bash_completion.dに追加することだけです。

source /full-path/to/your/autocomplete.sh

# or

. /full-path/to/your/autocomplete.sh

最後に実行可能にします。

chmod a+x admin.sh autocomplete.sh

源泉:https://askubuntu.com/a/483149/24155

関連情報