Hacktoberfest 2026: los issues que los mantenedores marcaron para octubre, abiertos y aptos para principiantes. Explorar issues de Hacktoberfest

Help text after failure should go to standard error

Abierto
#2,840 0 comentarios 0 reacciones 0 asignados Ver en GitHub

Nadie ha tomado este issue todavía.

Evaluación

Dificultad
3/5
Tiempo estimado
1-2 días
Aptitud para principiantes
68/100
Tipo de issue
Error
Claridad
Bastante claro
Estado de actividad
Tranquilo
Stack tecnológico
csharp
Área
cli

Línea de trabajo

Reproducir el comando mostrado en el issue y comparar stdout y stderr cuando se omite la opción obligatoria --ok, también con 2>/dev/null. Se considera terminado cuando la ayuda activada por la validación sigue al error en stderr, mientras que la ayuda solicitada explícitamente con -h permanece en stdout.

Escrito por el modelo de indexación a partir del texto del issue.

Descripción

When emitting help text because a command's options weren't specified correctly, the help text should be printed to the standard error stream. This avoids mixing diagnostic messages with program output.

The error message is correctly written to stderr, but the help text is not and I think it should match the error message's behavior.

If help was explicitly asked for with -h, then it's probably okay to send that to standard output.

$ dotnet --version
10.0.301

$ cat ok.cs
#!/usr/bin/env dotnet
#:package [email protected]
using System.CommandLine;
var okOption = new Option<bool>("--ok")
{
    Description = "Required flag. When passed, the app prints \"ok\".",
    Required = true,
};
var rootCommand = new RootCommand("Prints \"ok\" when --ok is passed.")
{
    okOption,
};
rootCommand.Validators.Add(result =>
{
    if (result.GetResult(okOption) is null)
    {
        result.AddError($"Option '{okOption.Name}' is required.");
    }
});
rootCommand.SetAction(parseResult =>
{
    Console.WriteLine("ok");
    return 0;
});
return rootCommand.Parse(args).Invoke();

$ dotnet run ok.cs
Option '--ok' is required.

Description:
  Prints "ok" when --ok is passed.

Usage:
  ok [options]

Options:
  --ok (REQUIRED)  Required flag. When passed, the app prints "ok".
  -?, -h, --help   Show help and usage information
  --version        Show version information

But redirecting stderr to /dev/null shows that the help text (but not the error message) is printed to stdout:

$ dotnet run ok.cs 2> /dev/null
Description:
  Prints "ok" when --ok is passed.

Usage:
  ok [options]

Options:
  --ok (REQUIRED)  Required flag. When passed, the app prints "ok".
  -?, -h, --help   Show help and usage information
  --version        Show version information
Lenguaje dominante
C#
Estrellas
3.7k
Forks
432
Métricas de merge de PR
Sin PR fusionados en 30 d

Preparar el entorno

Primeros pasos

  1. Lee el issue completo y luego la guía de contribución del proyecto.
  2. Comenta en el issue que vas a ocuparte — evita que dos personas hagan lo mismo.
  3. Haz un fork del repositorio y trabaja en una rama.
  4. Abre un pull request que haga referencia al número del issue.

Más de dotnet/command-line-api

Todos los issues de dotnet/command-line-api

Issues similares

Más issues de C#

Recibe los nuevos issues en tu correo

Un resumen breve de issues de GitHub para principiantes.