Uploaded image for project: 'Commons CLI'
  1. Commons CLI
  2. CLI-288

Inconsistent parsing of unlimited option values

Attach filesAttach ScreenshotAdd voteVotersWatch issueWatchersCreate sub-taskLinkCloneUpdate Comment AuthorReplace String in CommentUpdate Comment VisibilityDelete Comments
    XMLWordPrintableJSON

Details

    • Bug
    • Status: Open
    • Major
    • Resolution: Unresolved
    • 1.4
    • None
    • Parser
    • None

    Description

      with the following configuration...

      DefaultParser parser = new DefaultParser();
       Options opts = new Options();
      
      Option pager = Option.builder(null)
       .longOpt("cmd")
       .hasArg()
       .numberOfArgs(Option.UNLIMITED_VALUES)
       .build();
      
      opts.addOption(pager);
      

       
      This works as long as the value of cmd is a single value.

      $ myApp --cmd='less'
      

      The following does not work, as soon as we add options to less

      $ myApp --cmd='less -XFR'
      Exception in thread "main" com.cevaris.ag4j.cli.AppArgsException: org.apache.commons.cli.UnrecognizedOptionException: Unrecognized option: -XFR
              at com.cevaris.ag4j.cli.ApacheAppArgs.parse(ApacheAppArgs.java:33)
              at com.cevaris.ag4j.Main.main(Main.java:61)
      Caused by: org.apache.commons.cli.UnrecognizedOptionException: Unrecognized option: -XFR
              at org.apache.commons.cli.DefaultParser.handleUnknownToken(DefaultParser.java:360)
              at org.apache.commons.cli.DefaultParser.handleConcatenatedOptions(DefaultParser.java:702)
              at org.apache.commons.cli.DefaultParser.handleShortAndLongOption(DefaultParser.java:533)
              at org.apache.commons.cli.DefaultParser.handleToken(DefaultParser.java:243)
              at org.apache.commons.cli.DefaultParser.parse(DefaultParser.java:120)
              at org.apache.commons.cli.DefaultParser.parse(DefaultParser.java:76)
              at org.apache.commons.cli.DefaultParser.parse(DefaultParser.java:60)
              at com.cevaris.ag4j.cli.ApacheAppArgs.parse(ApacheAppArgs.java:31)'
      

      The following works, as long as we use a space to separate option & value, rather than using an =

      $ myApp --cmd 'less -XFR'  # works
      $ myApp --cmd='less -XFR'  # fails
      

      Attempted to use .valueSeparator() with no luck.

      Attachments

        Activity

          This comment will be Viewable by All Users Viewable by All Users
          Cancel

          People

            Unassigned Unassigned
            cevaris Adam Cardenas

            Dates

              Created:
              Updated:

              Slack

                Issue deployment