4

いくつかのオプションと 1 つの非オプション引数 (つまり、関連するオプション文字なし) を指定して呼び出されることを期待する C プログラムがあり、これらのオプションを解析するために getopt を使用します。たとえば、次のように呼び出すことができます。

例1: myProgram -a "aParam" -b "bParam" "xParam"

私は SLES10 を使用してきましたが、オプションは任意の順序で機能しました。たとえば、オプションではない引数「xParam」が最初に来る可能性があります。

例 2: myProgram "xParam" -a "aParam" -b "bParam"

ただし、SLES11 でテストすると、getopt はオプション以外のパラメーターに達するとすぐに処理を停止するように見えるため、上記の例 2 は機能しません。

getopt の man ページを読んだところ、これが関連している可能性があることがわかりました。

optstring の最初の文字が「+」であるか、環境変数 POSIXLY_CORRECT が設定されている場合、オプション以外の引数が検出されるとすぐにオプション処理が停止します。

SLES11 がデフォルトで POSIXLY_CORRECT を設定しているかどうかはわかりません。SLES11 で古い SLES10 の getopt 動作を取得する最良の方法は何ですか?

4

1 に答える 1

1

デフォルトでは、_posix_getopt()にリダイレクトされていたことが判明しました。これにより、上記の動作が発生していました。

私がこれに対して最終的に見つけた可能な解決策:

  1. 代わりにgetopt_long()を使用してください。これには、posixに相当するものがないようです。
  2. リダイレクトを停止する_GNU_SOURCEを定義します。
  3. おそらくラッパーシェルスクリプトを使用して、パラメータを手動で並べ替えます。
于 2012-11-15T20:46:12.470 に答える