3

シェルスクリプト内から、スクリプト固有の補完がユーザーによって初期化されたことを確認する方法を探していますcomplete -F ...

このチェックで、次のように補完を初期化する方法に関するアドバイスを出力してもらいたい:

Warning: Auto completion is not initialized. Please run : source ....; complete -F ...

問題は、サブシェルで実行されているスクリプトに、ユーザーが作業している親シェルの「完全な」環境に関する情報がないことです。

したがって、complete -p| grep my-script-name決して結果を返さないでください。

ユーザーは、「source」コマンドと「complete」コマンドを実行するか、手動で .bashrc に追加する必要があります。これは、bash 補完システム ディレクトリにアクセスできないサーバーで作業しているためです。

または、スクリプト内からオートコンプリートを初期化する (チェックするだけでなく) 方法を知っている場合は、喜んで受け入れます。

4

2 に答える 2

0

すべてのユーザーにbash補完を使用してもらいたい(これは良くないと思います。たとえば、オフにすることをお勧めします)か、ユーザーに自分で決めさせますが、このメッセージを各TABTABに印刷することは脅威です。思いませんか?

すべてのユーザーが実行すべきだと思うものを/etc/bash.bashrcに入れます。

于 2012-07-02T10:21:00.700 に答える
0

スクリプトが親シェルのそのような情報にアクセスできる唯一の方法は、それがサブシェルとして実行されるのではなく含まれている場合です。ユーザーに何らかの構成を含めるように指示するのではなく、スクリプトが実行されている場合でも含まれている場合でも機能するようにスクリプトを設計できます。

次に、補完を有効にしたい場合は、スクリプトを実行可能スクリプトとして実行するのではなく、スクリプトを含める必要があることをユーザーに通知するだけです(必要に応じて source または . を使用するように指示します)。

ただし、この場合、スクリプトを実行する 2 つのモードをサポートするのではなく、この情報をドキュメントに追加するか、常に表示されるバナーに追加する傾向があります (ただし、-q のようなオプション スイッチで無効にすることができます)。 (ゲインが非常に小さいため)。

于 2012-09-29T23:35:48.973 に答える