[Toybox] --help
Isaac Dunham
idunham at lavabit.com
Fri Apr 5 21:18:52 PDT 2013
On Fri, 5 Apr 2013 16:12:18 -0400
Jeremy Huntwork <jhuntwork at lightcubesolutions.com> wrote:
> Hi, I'm a bit confused about how help text should operate. To me it would make sense to be a universal option which toybox handled for every command, but I'm seeing unexpected results.
>
> For example:
>
> toybox # ln -s toybox sha1sum
> toybox # ./sha1sum
> ^C
>
> OK, so sha1sum is expecting a file name as the first argument, seems reasonable. But doesn't it allow specific keywords?
>
> toybox # ./sha1sum --help
> sha1sum: --help: No such file or directory
(snip)
> Guess not. Maybe toybox does?
>
> toybox # ./toybox help sha1sum
> usage: md5sum [FILE]...
>
> Calculate md5 hash for each input file, reading from stdin if none.
> Output one hash (16 hex digits) for each input file, followed by
> filename.
>
> OK, good, but it's the wrong help text, apparently because md5sum and sha1sum share the same c file:
(snip)
> Also, I find it interesting on some commands that --help is an unknown flag, which then actually does what I want and spits out the usage:
>
> toybox # ln -s toybox mkdir
> toybox # ./mkdir --help
> usage: mkdir [-p] [-m mode] [dirname...]
> Create one or more directories.
>
> -p make parent directories as needed.
> -m set permissions of directory to mode.
>
> mkdir: Unknown option help
>
> Is there an acceptable way to standardize this across all toys?
To some extent, there will be variation.
But I was looking at ifconfig and found it had an interesting approach:
static void show_help(void)
{
char **arg = xzalloc(sizeof(char*) *3);
arg[0] = "help";
arg[1] = xstrdup(toys.which->name);
toy_exec(arg);
}
..
if(argv[0] && (strcmp(argv[0], "--help") == 0))
show_help();
It seems to me that show_help() might be suitable for inclusion in lib/.
In theory, one could make the main logic handle <toy> --help like help <toy>, but it would be impossible to implement POSIX and still support
help with -h in all cases where it's appropriate (I remember one or two commands use -h for other purposes, though I don't remember which).
Of course the
char **argv = toys.optargs;
looks rather ugly to me...
--
Isaac Dunham <idunham at lavabit.com>
More information about the Toybox
mailing list