問題タブ [bash-completion]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
bash - Makefile 内の汎用ターゲットを使用した make の Bash 補完
ほとんどのターゲットが既定のシーケンスによって一般的に作成される Makefile があります。bash の補完は、通常のターゲットの補完のみを示唆しているようです。
一般的なターゲットではありません。上記の例のように明示的に作成されていなくても、bash の完了をすべてのターゲットで完了する方法はありますか? より具体的に言うと、ターゲット名のリストを定義し、次のようにするとします。
これらのターゲットを bash の完了に使用できるようにする方法はありますか? または、さらに高度な例として、2 つのリストがあり、2 つのリストの要素のすべての可能な組み合わせでターゲットを作成したいとします。これらのターゲットを bash の完了にも使用できますか?
bash - 変数の非表示のルート プレフィックスを使用した Tcsh および/または bash ディレクトリの補完
少しひねりを加えて、tcshおよび/またはbash(両方とも私のサイトで使用されています)でディレクトリ補完を設定しようとしています。特定のコマンド「foo」について、補完にカスタム関数を使用して一致させたいと思います/ で区切られた最初の用語を実際のサブツリー ノードに追加し、その後、後続の用語については通常のディレクトリ補完に従います。これは、cdpath と補完の組み合わせのようなものです。または、補完スクリプトによって開始点が制御されるディレクトリ補完の形式だと思います。次のように動作します。
私たちは大規模な製品開発ツリー (これは CGI 生産施設です) を持っており、シェルに精通したユーザーが常にナビゲートしたり飛び回ったりしているため、これを行いたいと考えています。不満は、ツリーの上位レベルが扱いにくく冗長であることです。可能な「頭」の選択肢を見つけ、そこからディレクトリ補完を行うために、最初の用語をすばやく検索する必要があります。プログラマブル補完がこれを行う方法を提供できるように思えますが、それはかなりとらえどころのないものであることが判明しています.
これを行うために、カスタムの bash と tcsh の補完を何度か試みましたが、最も近いものは、ユーザーがディレクトリ レベルをスペースを含む個別の単語として扱わなければならない「単語補完」の形式です (例: foo scene/ shot /要素/ワークスペース/ ...)。現在のスクリプトをハッキングし続けることもできますが、何か理解できないことがあるのだろうかと思っていました.これはプログラム補完の最初の試みであり、ドキュメントと例はシェルブックとインターネットでかなり薄いです. . 私を正しい軌道に乗せることができる補完の達人がそこにいるなら、私はそれを感謝します.
FWIW:これが私がこれまでに得たものです(最初にtcshで、次にbashで)。静的ルート「/root/sub1/sub2/sub3」は、さまざまなレベルでさまざまな一致を見つける検索機能の単なるプレースホルダーであることに注意してください。それを機能させることができれば、後で検索機能をサブスクライブできます。繰り返しますが、どちらの例も単語補完を行います。これには、一致する各用語の後にユーザーがスペースを入力する必要があります (実際のパスを構築するために、関数内のスペースも削除する必要があります!)
TCSH の例 (関数は実際には bash スクリプトであることに注意してください):
BASH の例:
bash - カスタム bash-completion ルールの作成
同じプレフィックスを持つファイルでいっぱいのディレクトリがあり、vimですばやく開くことができます。たとえば、次のような場合があります。
私が望むのは、これらのディレクトリのいずれかにいて、次のように入力できるようにすることです。
そして、次のようにオートコンプリートします。
これを達成するために、「bar_」を含む「.completion」という名前のディレクトリごとのファイルを用意できてうれしく思います。
私が抱えている問題は、次の動作が必要なことです。
どこで | はカーソルなので、ファイルが一致する場合は末尾にスペースを追加します。プレフィックスを一致させる場合は、スペースを追加しないでください。
私がこれまでに持っている最高のものは、この動作から最後にスペースを追加することを差し引いたものです。ありとあらゆることを試しましたが、すべて無駄でした。以下は私が持っているものです:
ファイル名の完了後にスペースを追加する方法についてのアイデアはありますが、プレフィックスの完了後ではありません。
arrays - bash 補完のコンテキストでの ${array[*]} と ${array[@]} の混乱
私は初めて bash 補完を書くことに挑戦しています。bash 配列を逆参照する 2 つの方法 (${array[@]}
および${array[*]}
) について少し混乱しています。
関連するコードのチャンクは次のとおりです(ちなみに、動作しますが、もっとよく理解したいと思います):
bashのドキュメントには次のように書かれています:
${name[subscript]} を使用して、配列の任意の要素を参照できます。中括弧は、シェルのファイル名展開演算子との競合を避けるために必要です。添え字が '@' または '*' の場合、単語は配列名のすべてのメンバーに展開されます。これらの添え字は、単語が二重引用符で囲まれている場合にのみ異なります。単語が二重引用符で囲まれている場合、${name[*]} は各配列メンバーの値が IFS 変数の最初の文字で区切られた単一の単語に展開され、${name[@]} は name の各要素を展開します別の言葉に。
compgen -W
これで、可能な選択肢の単語リストを含む文字列が期待されることは理解できたと思いますが、このコンテキストでは、「${name[@]} は name の各要素を個別の単語に展開する」という意味がわかりません。
簡単に言え${array[*]}
ば、動作します。${array[@]}
しません。その理由を知りたいのですが、正確に何が${array[@]}
展開されるのかをよりよく理解したいと思います。
bash - プログラムで特定のコマンドのbash補完にアクセスする
小さなコマンドランチャーアプリケーションを作成しようとしていますが、自分の補完システムでbashのタブ補完を使用したいと思います。を使用して、一般的なコマンドの補完のリストを取得できましたcompgen -abck
。
ただし、特定のコマンドの補完も取得したいと思います。たとえば、入力git p
にはgitのコマンドの補完が表示されます。
これを行うために使用できる方法はありますcompgen
か?そうでない場合、プログラムで完了のリストを取得する他の方法はありますか?
[編集:明確にするために、私はbashに補完を提供しようとはしていません-私のアプリはGUIコマンドランチャーです。自分のアプリでbashの既存の補完を使用したいだけです。]
linux - Rails 3 の bash_completion
bash_completion
Rails 3 に対応するスクリプトはありますか?
bash - COMPREPLY bash 補完オプションの部分文字列のみをユーザーに表示する
bash 補完スクリプトでは、COMPREPLY=(aa/ba/ aa/bb/)
. スクリプトが呼び出されると、補完オプションは次のようにユーザーに表示されます。
ただし、これらのオプションの表示方法をもう少し制御したいと考えています。特に、各 COMPREPLY オプションの部分文字列のみをユーザーに表示したいと考えています。これは、現在の bash でのディレクトリ補完の仕組みと同様です。
bashでこれを行う方法はありますか?
makefile - makefileターゲットのbash完了
次のような単純なmakefileがあるとします。
次に、bashで次のようなものが必要です。
h<タブ>を作成します
完了できるように
こんにちは
空のファイルhello
を作成するような簡単な方法を見つけましたが、もっと洗練されbye
たものを探しています。
bash - bash の動的 case ステートメント
bash スクリプトで動的な case ステートメントを作成する方法を理解しようとしています。
たとえば、次の内容の awk ステートメントの出力があるとします。
このシナリオでは、出力はいつでも変更できます。
この awk 出力に値が含まれている場合、別のロジックを実行しようとしています。
したがって、上記のデータが $list にある場合、概念的には次のようにしたいと思います。
これを使用して、動的なカスタム タブ補完機能を構築しようとしています (背景についてはhttp://www.debian-administration.org/article/An_introduction_to_bash_completion_part_2を参照してください)。
何か案は?
ありがとう。
bash - bashとreadline:ユーザー入力ループでのタブ補完?
ユーザーにコマンドラインを表示するbashスクリプトを作成しています。
CLIコードは次のとおりです。
明確化:Bash4で作成およびテスト済み
つまり、「read -e」はreadline機能を提供し、コマンドを呼び出したり、入力行を編集したりすることができます。私ができないことは、 readlineのタブ補完を機能させることです。
私は2つのことを試しました:
想定される方法:ここで 機能することが報告されているbash組み込みの「complete」および「compgen」を使用します。更新:スクリプトで機能することは報告されていません。
スクリプト内で「complete」を使用すると、readlineが正しく動作しないのはなぜですか?インタラクティブモードでbashから試してみると動作します...