util-linuxのgetoptは最初のパラメータを無視します。

util-linuxのgetoptは最初のパラメータを無視します。

コマンドライン引数を解析するために、stackexchange Webサイトの投稿に従いました。私のプログラムは長いパラメータのみを解析し、すべてのパラメータは必須です。私がしたことは次のとおりです。

getopt --test > /dev/null
if [[ $? -ne 4 ]]; then
    echo "getopt --test failed in this environment."
    exit 1
fi

function quit {
    echo "$1"
    exit 1
}

# Option strings
LONG="producer-dir:,consumer-dir:,username:,password:,url:,kafka-host:,checkpoint-dir:"

# read the options
OPTS=$(getopt --longoptions ${LONG} --name "$0" -- "$@")
if [ $? != 0 ]; then 
    quit "Failed to parse options...exiting."
fi

eval set -- "$OPTS"

# extract options and their arguments into variables.
while true ; do
  case "$1" in
    --producer-dir )
      PRODUCER_DIR="$2"
      shift 2
      ;;
    --consumer-dir )
      CONSUMER_DIR="$2"
      shift 2
      ;;
    --username )
      USERNAME="$2"
      shift 2
      ;;
    --password )
      PASSWORD="$2"
      shift 2
      ;;
    --url )
      URL="$2"
      shift 2
      ;;
    --kafka-host )
      KAFKA_HOST="$2"
      shift 2
      ;;
    --checkpoint-dir )
      CHECKPOINT_DIR="$2"
      shift 2
      ;;
    -- )
      shift
      break
      ;;
    *)
      echo "Internal error!"
      exit 1
      ;;
  esac
done

パラメータをどの順序で渡しても、最初のパラメータは無視され、結果は空です。残りのパラメータは期待どおりに解析されます。私は何を見逃していますか?

ベストアンサー1

私の考えでは、最初の引数として意図した内容が解釈されているようですgetoptoptstringマニュアルページの先頭にはgetopt3つの概要がリストされています。 2番目のものを使用しているようです。

`getopt [options] [--] optstring parameters`

最初の項目以降では--ありませんが、parametersという点に注意してくださいoptstring

getoptこのトピックについて話している間、bashにはtrailing bashgetoptsの内部バージョンがあることに注意する必要がありますs。他のすべてが同じ場合は、bashの内部機能を使用する方が効率的でなければなりません。

おすすめ記事