0

という名前のシンボリック リンクを作成し、シンボリックxyzリンク名を含むユーザーの入力をキャッチします。

例: ユーザーが次のように入力した場合:

xyz load aab\1.0.5

xyz load aab\1.0.5より多くのことができる文字列として持ちたいです。

なぜ私は尋ねるのですか?(読み飛ばしてもいいもの)

この場合、この文字列の一部をディレクトリの名前と比較し、

  1. 一致しない場合にユーザーに警告を与える、または
  2. それ以外の場合と同じようにコマンドを実行します。

私がやりたいことは、moduleコマンドを乗っ取ることです。

編集:エイリアスを使用する必要があると思います。

Edit2: 明確化

私がやりたいことはまさにこれです: ユーザーが入力したときmodule load programor module load program/2.3.3. 彼らが要求しているバージョンが特定のプラットフォームで利用可能かどうかを知る前に、コマンドを実行したくありません。フォルダを調べると、利用可能なバージョンを確認できます/app/firefox/.sys/@sys/

根本的な「問題」は、moduleすべてのモジュールを SLES 10 と 11、32 ビットと 64 ビットで使用できるように設定されているため、場合によってはユーザーが自分のプラットフォームで使用できないバージョンをロードしようとすることです。

私は今、問題に気付きました.バージョンを入力しないと、デフォルトのバージョンが選択されます. しかし、スクリプトを使用してデフォルトのバージョンを簡単に見つける方法がわかりません。結果を出力するのはモジュール以外のものであるため、「(デフォルト)」を含むバージョンを取得するためのgrepmodule appname availは機能しません。たとえばmodule firefox avail >> result.text、空のファイルを提供します。

4

1 に答える 1

0

質問が正しいかどうかはわかりませんが、特定のコマンドを「フック」しようとしている可能性があります。その場合、フック スクリプトを使用してそれを行うことができ、実際のコマンドの前に $PATH に表示される、フックするコマンドと同じ名前でリンクします。したがって、実際のコマンドを呼び出すかどうかを決定できます。コマンド。

例えば:

(警告: これは別の危険で醜いハックです)

$猫フック

#!/bin/bash
# hook for some commands

echo $0

cmd=$(basename "$0")
echo "called as $cmd"

if [[ $cmd = "module" ]]
then
    realcmd=/usr/bin/module

    # verify parameters

    # then call real command
    $realcmd "$@"
    rc=$?
    exit $rc
else
    echo "???" 1>&2
    exit 1
fi

$chmod a+x フック

$ln -s フック モジュール

$PATH=.:$PATH モジュール arg1 arg2

于 2012-10-18T15:33:23.460 に答える