5

問題:顧客 X は Windows ユーザーで、シェル経由で RedHat ボックスにログインしているときに、ニーモニック キーワードまたは「タグ ヒント」を使用して、事前にパッケージ化された bash コマンドをトリガーできるようにしたいと考えています。

例:顧客 X は、ssh を使用してホストにログインし、いくつかの日常的なファイル操作を実行したいと考えています。彼女はタイプできるようになりたい

copy file

プレハブの空欄を埋める bash コマンドのリストを取得して、選択する

cp <@source@> <@dest@>               ### simple copy
cp -R <@startdir@>  <@destdir@>      ### recursive copy

次に、これらの項目の 1 つを選択し、空白を埋めて、Enter キーを押すだけでコマンドを実行できるようにしたいと考えています。

顧客 X は、使用する可能性が高いコマンドを事前に指定し (Windows で話します)、開発者を雇ってそれらを bash コマンドに変換し、それらをスクリプトにまとめて、Windows で話すことができるようにします。 -bash に話しかけて、コマンドのリストを取得します。

注: 顧客 X は apropos が好きではありません。これは、Windows で使用される用語とは対照的に、bash で使用される用語に精通していることを前提としているためです。例えば:

 apropos shortcut

彼女は Linux でどの Windows ショートカットが呼び出されているかを知らないため、シンボリック リンクの作成については何も教えてくれません (それがまさに彼女が望んでいることであるにもかかわらず)。明らかに、Windows の概念は 100% を超えるものではないため、最終的には学習する必要がありますが、彼女は忙しい人であり、Linux の理解を「容易にする」方法としてこれを求めています。

質問:このようなことを始める最善の方法は何ですか? 既にこのようなことを行う perl、python、ruby スクリプトはありますか? この種の機能要求をシミュレートできる bash はありますか?

4

1 に答える 1

5

おそらく必要なのは、bash のcommand-not-foundハンドラーをオーバーライドすることです。ハンドラーをインストールする標準の Ubuntu インストールの /etc/bash.bashrc のセクションは次のとおりです。

...
# if the command-not-found package is installed, use it
if [ -x /usr/lib/command-not-found ]; then
        function command_not_found_handle {
                # check because c-n-f could've been removed in the meantime
                if [ -x /usr/lib/command-not-found ]; then
                   /usr/bin/python /usr/lib/command-not-found -- $1
                   return $?
                else
                   return 127
                fi
        }
fi
...

実際には、コマンドが見つからない場合、ユーザー指定のプログラムがそのコマンドをパラメーターとして実行されます。Ubuntu の場合、ユーザーが入力したコマンドがインストール可能な有効なアプリケーションであるかどうかを確認し、有効な場合はインストールできることをユーザーに通知する Python プログラムです。

おそらくやりたいことは、それをコマンドと使用文字列のハッシュリファレンスと比較し、一致する場合は適切なものを表示することです。

于 2008-12-19T01:51:40.677 に答える