7

コマンドが呼び出されるたびに情報をキャッシュするラッパー シェル スクリプトを作成しようとしています。最初の非オプション引数のみを格納する必要があります。たとえば、

$ mycommand -o option1 -f another --spec more arg1 arg2

「arg1」を取得したい。

これをbashでどのように行うことができますか?

4

3 に答える 3

9

getoptを使用するのがおそらく最善の方法です。

bash で引数スキャン コードを見たい場合、getopt 以外の方法は次のとおりです。

realargs="$@"
while [ $# -gt 0 ]; do
    case "$1" in
      -x | -y | -z)
        echo recognized one argument option $1 with arg $2
        shift
        ;;
      -a | -b | -c)
        echo recognized zero argument option $1, no extra shift
        ;;
      *)
        saveme=$1
        break 2
        ;;
    esac
    shift
done
set -- $realargs
echo saved word: $saveme
echo run real command: "$@"
于 2009-09-25T03:01:49.440 に答える
3

コマンド ライン全体を調べずに特定の引数を選択する方法はありません。この理由は、コマンド ラインでの相対位置に関係なく、任意のオプションを任意の順序で指定できるという bash の基本的な仮定にあります。もう 1 つの前提は、短い形式または長い形式 (つまり、「-f」または「--file」) で man ページに指定されたオプションは、コマンドの実行において有効で認識された使用法を持つということです。

あなたの最善の策は、DigitalRoss が提供する例を使用して、コマンドの有効なオプションごとに case ステートメントの値をコーディングするか、スクリプトで処理したいものだけをコーディングして、他のすべてをキャプチャすることです。 "*)" コンストラクトを作成し、そのテストに該当する場合は無視します。秘訣は、特定のオプションに複数の有効な引数がある場合、引数間の区別が位置によるものか、引数の内容に基づくパターン マッチングによるものかを事前に知る必要があることです。複数の引数を持つオプションで、ある引数から次の引数に移動するには、"skip" ディレクティブも使用する必要があります。

于 2009-09-28T14:28:35.110 に答える
2

あなたはおそらく何かをしたいと思うでしょう(使い方についてはここまたはここgetoptを見てください)。

コマンド ライン全体を保存して (実際のツールにそのまま渡せるように)、 で引数を処理し、getopt必要な情報を取得して、下にあるツールを起動します。

于 2009-09-25T02:24:14.540 に答える