{"record":{"id":"7089e46ab705a50d","repo":"elastic/elasticsearch","slug":"usage","errorCode":"USAGE","errorMessage":"Positional arguments not allowed, found ${options.nonOptionArguments()}","messagePattern":"Positional arguments not allowed, found (.+?)","errorType":"validation","errorClass":"UserException","httpStatus":null,"severity":"warning","filePath":"distribution/tools/server-cli/src/main/java/org/elasticsearch/server/cli/ServerCli.java","lineNumber":82,"sourceCode":"        versionOption = parser.acceptsAll(Arrays.asList(\"V\", \"version\"), \"Prints Elasticsearch version information and exits\");\n        daemonizeOption = parser.acceptsAll(Arrays.asList(\"d\", \"daemonize\"), \"Starts Elasticsearch in the background\")\n            .availableUnless(versionOption);\n        pidfileOption = parser.acceptsAll(Arrays.asList(\"p\", \"pidfile\"), \"Creates a pid file in the specified path on start\")\n            .availableUnless(versionOption)\n            .withRequiredArg()\n            .withValuesConvertedBy(new PathConverter());\n        quietOption = parser.acceptsAll(Arrays.asList(\"q\", \"quiet\"), \"Turns off standard output/error streams logging in console\")\n            .availableUnless(versionOption)\n            .availableUnless(daemonizeOption);\n        enrollmentTokenOption = parser.accepts(\"enrollment-token\", \"An existing enrollment token for securely joining a cluster\")\n            .availableUnless(versionOption)\n            .withRequiredArg();\n    }\n\n    @Override\n    public void execute(Terminal terminal, OptionSet options, Environment env, ProcessInfo processInfo) throws Exception {\n        if (options.nonOptionArguments().isEmpty() == false) {\n            throw new UserException(ExitCodes.USAGE, \"Positional arguments not allowed, found \" + options.nonOptionArguments());\n        }\n        if (options.has(versionOption)) {\n            printVersion(terminal);\n            return;\n        }\n\n        validateConfig(options, env);\n\n        var secureSettingsLoader = secureSettingsLoader(processInfo);\n\n        try (\n            var loadedSecrets = secureSettingsLoader.load(env, terminal);\n            var password = (loadedSecrets.password().isPresent()) ? loadedSecrets.password().get() : new SecureString(new char[0]);\n        ) {\n            SecureSettings secrets = loadedSecrets.secrets();\n            if (secureSettingsLoader.supportsSecurityAutoConfiguration()) {\n                env = autoConfigureSecurity(terminal, options, processInfo, env, password);\n                // reload or create the secrets","sourceCodeStart":64,"sourceCodeEnd":100,"githubUrl":"https://github.com/elastic/elasticsearch/blob/db6a809a667c081ca1dc7500389d26975573215f/distribution/tools/server-cli/src/main/java/org/elasticsearch/server/cli/ServerCli.java#L64-L100","documentation":"Thrown by ServerCli.execute() at the very start when the parsed command line contains non-option (positional) arguments. The elasticsearch command accepts only named flags (--daemonize, --pidfile, etc.); bare positional tokens are rejected as usage errors.","triggerScenarios":"Running bin/elasticsearch with a trailing positional token, e.g. bin/elasticsearch start or bin/elasticsearch foo bar.","commonSituations":"Assuming a 'start' subcommand like systemd/init scripts; passing a config file path positionally instead of via -E path.conf=...; copy-pasting a command from outdated docs.","solutions":["Remove all positional arguments; use only named flags (e.g. -d, -q, -p <pidfile>, -E <setting>=<value>).","If you meant to pass a setting, use -E cluster.name=mycluster.","Run bin/elasticsearch --help to see accepted options."],"exampleFix":"# before\nbin/elasticsearch start\n\n# after\nbin/elasticsearch","handlingStrategy":"validation","validationCode":"if (!options.nonOptionArguments().isEmpty()) {\n    throw new IllegalArgumentException(\n        \"Positional args not allowed: \" + options.nonOptionArguments()\n            + \" — use named flags like -E key=value.\");\n}","typeGuard":null,"tryCatchPattern":null,"preventionTips":["Use only named flags with the elasticsearch command.","Pass settings via -E <key>=<value>.","Consult bin/elasticsearch --help when in doubt."],"tags":["cli","usage","arguments","startup"],"analyzedSha":"db6a809a667c081ca1dc7500389d26975573215f","analyzedAt":"2026-08-12T01:39:14.192Z","schemaVersion":2},"datasetVersion":"2026-08-12T06:17:24.410Z"}