On Fri, Apr 30, 2021 at 03:28:42PM +0100, Jason McIntyre wrote: > On Fri, Apr 30, 2021 at 04:07:55PM +0200, Marc Espie wrote: > > On Fri, Apr 30, 2021 at 02:44:01PM +0100, Jason McIntyre wrote: > > > On Fri, Apr 30, 2021 at 11:54:16AM +0200, Marc Espie wrote: > > > > Until a patch from naddy, I wasn't even aware of getopts in sh(1) > > > > > > > > Unless I made some mistakes, this translates the example in getopt(1) > > > > manpage. > > > > > > > > It's likely some stronger wording might be adequate, I suspect some > > > > of the BUGS section in getopt(1) does not apply to the sh(1) built-in. > > > > > > > > > > hi marc. > > > > > > is there a reason why you wanted the example in sh(1) and not ksh(1)? > > > > > > i think the overall structure is that ksh(1) is the full monty, whereas > > > sh(1) is really a simplified reference to which bits you can use if you > > > want to keep things portable. to that end there aren;t really any > > > examples in sh(1). i felt that having a short page was more beneficial > > > in the long run (especially since we already have a full on ksh(1) > > > page). > > > > > > having said that, getopts is one of those things that you really won;t > > > get from reading descriptive text. an example is definitely helpful. so > > > i'd not be dead against it in sh(1) if there's a good reason. > > > > > > there's also the possibility that it may be more helpful to show it in > > > getopts(1) itself? i guess there are pros and cons there too. > > > > > > jmc > > > > getopts(1) is not a separate command. Having built-ins in their separate > > manpage would be a definitive departure from what we've always done. > > > > i'm not advocating that. ah i think i see the misunderstanding - when i > said it could "show it in getopts(1) itself" i meant getopt(1) of > course. i was not proposing we create a getopts(1) page! sorry about > that! > > > Some linux distributions do have some of the built-ins in their own > > man pages so that they're easier to find, which makes all kind of sense > > to me, even though it's pedantically incorrect. I think it would help, > > but you are going to ruffle all kinds of feathers. > > > > where a standalone command and sh builtin co-exist (like kill) we > tend to note in STANDARDS for that command that a shell version > exists. in this case though, getopt(1) just references sh(1): we > couldn;t add a pointer to STANDARDS (since it doesn't have one) so > i think we just nudged SEE ALSO. it could be that we should be more > upfront in getopt(1) about the shell built-in getopts. > > > > > Also, getopts is POSIX. Documenting it in ksh would send the wrong signal > > in my opinion (but if I replace getopt with getopts, am I still writing > > a standard shell script). > > > > well, getopts is already documented in ksh(1). along with all the other > builtins mandated by posix. so i can;t see how it would "send the wrong > signal". > > my argument boils down to: sh(1) is small and has no examples. adding > them changes the (deliberate) nature of the page. ksh(1) is what you > read when you can;t get to sleep. > > why is it wrong to add your example to ksh(1)? why would that leave the > reader disadvantaged? > > > That said, we can easily lift the exact same paragraph in both manpages. > > > > i don;t like that idea. these pages are already big enough, and duplicate text > always, at some point, goes out of sync. > > jmc > > My diff includes a nudge from getopt(1) towards getopts.
Now, it needs to be 100% explicit that getopts is now POSIX standard, and thus a perfectly good (somewhat portable) replacement.