2016-04-18 6 views
1

私のプロジェクトでは、すべての実行ファイルが$PROJECTROOT/bin/にあります。メインの実行可能ファイル$PROJECTROOT/bin/runは、パラメータ-pでプラグインを読み込むことができます。 ./bin/run -p plugin1。すべてのプラグインは$PROJECTROOT/plugins/です。 $PROJECTROOT/plugins/にすべてのプラグインの自動補完機能を追加します。したがって、bin/runのバイナリに対してpluginsディレクトリにアクセスする必要があります。実行ファイルをどこからでも実行したいからです。 ~/myproject/bin/run -p plugin1を実行して、利用可能なプラグインの一覧については~/myprojects/pluginsを確認する必要があります。bash自動補完で実行可能ファイルから相対パスを取得

実行可能ファイルのパスが$EXECの場合は、$(dirname $EXEC)/../pluginsを使用してプラグインディレクトリにアクセスできます。私はEXEC=$0を試しましたが、それは動作しません。$0は、自動完成させる実行可能ファイルを参照していないためです。 bashの自動補完機能で実行可能ファイルのパスを取得する方法はありますか?

私のオートコンプリートファイルには、以下のようになります:コマンドへのパスが完了して

_run() 
{ 
    local cur prev opts base 
    cur="${COMP_WORDS[COMP_CWORD]}" 
    prev="${COMP_WORDS[COMP_CWORD-1]}" 

    opts="-d -p" 

    case "${prev}" in 
    -p) 
     local available_plugins=$(ls $(dirname $0)/../plugins) 
     #         ^^^ this doesn't work 
     COMPREPLY=($(compgen -W "${available_plugins}" -- ${cur})) 
     return 0 
     ;; 
    *) 
     ;; 
    esac 

    COMPREPLY=($(compgen -W "${opts}" -- ${cur})) 
} 
complete -F _run run 
+1

'$ {COMP_WORDS [0]}'のコマンドはありませんか? –

+0

@エタンReisner、そうですよ!ありがとうございます - これを回答として追加すると、私はそれを受け入れます。 – morxa

答えて

1

${COMP_WORDS[0]}(同じようにカーソルの下の単語が${COMP_WORDS[COMP_CWORD]}である)です。

これを使用して、コマンドを実行することができます。しかし、コマンドが$PATHから実行されている場合、コマンドは裸の名前になります(また、使用するパスが含まれていない)ので、これも処理する必要があります。

関連する問題