私のプロジェクトでは、すべての実行ファイルが$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
'$ {COMP_WORDS [0]}'のコマンドはありませんか? –
@エタンReisner、そうですよ!ありがとうございます - これを回答として追加すると、私はそれを受け入れます。 – morxa