bug#51311: [PATCH] echo: update --help to document edge cases

2021-10-22 Thread Florent Flament
Pádraig Brady  writes:
> Thanks for all the input.
> I've now pushed the following to address this:
>
> https://git.sv.gnu.org/gitweb/?p=coreutils.git;a=commitdiff;h=f60a3981c
>
> Notes:
>   - Brevity in --help and man pages is a feature
>   - I kept the existing NOTE: style in --help to avoid a separate [NOTES] in 
> man
>   - I only detailed the edge cases in the info manual,
>   as directing users to printf(1) is the better most general option
>   - It's easy to get to online info pages now by following the link
>   at the bottom of all man pages

Thanks Pádraig, this is a great update.

Cheers,
Florent





bug#51311: [PATCH] echo: update --help to document edge cases

2021-10-22 Thread Bernhard Voelker
On 10/22/21 16:21, Pádraig Brady wrote:
> Thanks for all the input.
> I've now pushed the following to address this:
> 
> https://git.sv.gnu.org/gitweb/?p=coreutils.git;a=commitdiff;h=f60a3981c
> 
> Notes:
>   - Brevity in --help and man pages is a feature
>   - I kept the existing NOTE: style in --help to avoid a separate [NOTES] in 
> man
>   - I only detailed the edge cases in the info manual,
>   as directing users to printf(1) is the better most general option
>   - It's easy to get to online info pages now by following the link
>   at the bottom of all man pages

Thanks, I like it.

FWIW the biggest trap for users is still that in ~95% of the cases it is the
shell's builtin which gets called instead of that of the coreutils.
Hence, we've been improving the documentation for the users which
unsuspectingly read coreutils 'man echo' instead of that of the shell.

Have a nice day,
Berny






bug#51311: [PATCH] echo: update --help to document edge cases

2021-10-22 Thread Pádraig Brady

On 21/10/2021 21:54, Bernhard Voelker wrote:

On 10/21/21 15:14, Florent Flament wrote:

Pádraig Brady  writes:

+NOTE: printf(1) is a preferred alternative, with more standard option 
handling.\



I believe that it misses the point. It is still not clear that the echo
command doesn't behave as one would expect for a few edge cases.

Maybe something like this would be closer to what I'm trying to express:

NOTE: printf(1) is a preferred alternative, which doesn't share echo's
inability to handle edge cases.


I'm not sure that just mentioning "edge cases" will remind people either
that they are falling into such particular edge case.

Therefore, I'd prefer Padraig's shorter sentence: it expresses the matter
positively while the latter proposal tries to explain via negative wording.

If we want to be more explicit, then we'd have to name examples where
printf(1) is superior to echo(1) - or the shell's echo builtin.
But IMO the whole point is two-fold: if someone doesn't have enough experience
to understand the edge cases, then eventually the usage of printf with the
often complex format specifiers is also too much.
Finally, I think Padraig's suggestion had the best tradeoff between pointing
out the matter and getting too much into details.


Thanks for all the input.
I've now pushed the following to address this:

https://git.sv.gnu.org/gitweb/?p=coreutils.git;a=commitdiff;h=f60a3981c

Notes:
 - Brevity in --help and man pages is a feature
 - I kept the existing NOTE: style in --help to avoid a separate [NOTES] in man
 - I only detailed the edge cases in the info manual,
 as directing users to printf(1) is the better most general option
 - It's easy to get to online info pages now by following the link
 at the bottom of all man pages

cheers,
Pádraig





bug#51311: [PATCH] echo: update --help to document edge cases

2021-10-22 Thread Florent Flament
Bernhard Voelker  writes:
> On 10/21/21 15:14, Florent Flament wrote:
>> NOTE: printf(1) is a preferred alternative, which doesn't share echo's
>> inability to handle edge cases.
>
> I'm not sure that just mentioning "edge cases" will remind people either
> that they are falling into such particular edge case.

I agree that my sentence is not good, because "edge cases" is too
vague. And so far I haven't been able to find a good one liner to
express echo's drawbacks.

> Pádraig Brady  writes:
>> +NOTE: printf(1) is a preferred alternative, with more standard option 
>> handling.\
>
> Therefore, I'd prefer Padraig's shorter sentence: it expresses the matter
> positively while the latter proposal tries to explain via negative
> wording.

I believe that "with more standard option handling" is too vague as
well, and doesn't convey the issue with echo.

> If we want to be more explicit, then we'd have to name examples where
> printf(1) is superior to echo(1) - or the shell's echo builtin.

I agree. Examples could make the point clearer.

> But IMO the whole point is two-fold: if someone doesn't have enough experience
> to understand the edge cases, then eventually the usage of printf with the
> often complex format specifiers is also too much.

I believe that GNU users don't understand echo's drawbacks because they
aren't documented. Therefore users need to have enough experience to
have been confronted to undocumented echo related issues. I don't
believe that the printf command is complex. It is not used because users
are not aware that it exists, or don't understand why it is a better
alternative to echo.

> Finally, I think Padraig's suggestion had the best tradeoff between pointing
> out the matter and getting too much into details.

It is an improvement over current situation, but I would argue to go a
little bit further.

I can understand that one would want to keep the command's help message
short to avoid drowning the user into details. However, when a user
types "man echo", he/she wants to have details about the command's
behavior. I see the man page as the reference documentation of the
command, and I expect to find all of its drawbacks that have been
identified so far. I see the info documentation as a reference book that
centralizes the information a user would need to properly use the
operating system, possibly with more details, examples and anecdotes.

Therefore, I would argue for a slightly updated version of Pádraig's
sentence in echo's help message:

  NOTE: printf(1) is a preferred alternative (see echo(1) man page).

Then I would add the note that Glenn and Franck proposed to echo's man
page:

  For historical and back-compatibility reasons, certain bare option-like
  strings cannot be passed to echo as non-option arguments. The only way
  to echo the string '-n', for instance, is to specify the dash in either
  octal or hexadecimal representation (e.g. 'echo -e "\x2dn"'). It is
  therefore not advisable to use echo(1) for printing unknown or variable
  arguments. More generally, printf(1) is recommended as a more modern
  and flexible replacement for tasks historically performed by echo(1).

Ideally, The "echo invocation" info page should be updated as well with
a similar note, and possibly with some examples.

Here's a (slightly updated) example from Bob Proulx. Do you expect this
behavior when running this and typing "-n" as its input ?

  printf "What do you want me to say? "
  IFS= read -r phrase
  echo $phrase  # N!

  printf "What do you want me to say? "
  IFS= read -r phrase
  printf "%b\n" "$phrase"  # Yes!

  The above shows input from an untrusted source.  It's "tainted".  It
  should not be used without caution.

I believe that these kind of details are what makes the difference
betwen ok software and great software. Also, I think that such an update
may prevent programmers from going into troubles, and maybe help them
fix existing code.

Have a great day,
Florent