On 9/1/22 05:25, Marc Chantreux wrote:
> hello people,
> 
> This is my first post so:
> 
> * Rob (and maybe other contributors I don't know about): thank you so much 
> for your work
> * short intro of myself: I work at the University of Strasbourg HPC,
>   linux user since the last millenium (always happy to help and share),
>   perl monger and raku early adopter.
> 
> I would like to challenge toybox as the standard shell scripting environment
> for some projects at work as:
> * we need something to be officially supported
> * we fear GNU tools (both bash and coreutils)
> * 9base and sbase are niche
> * I saw a great talk about busybox vs toybox
> 
> So here I am. What I did for the moment is:
> 
>       make menuconfig
>       make
>       set $(realpath ./toybox) ~/local/bin
>       mkdir -p $2/t
>       $1 | tr ' ' '\n' | xargs -IT ln -s $1 $2/t/T
>       <<. install -m700 /dev/stdin ~/local/bin/toys
>       #! /bin/sh
>       PATH=$2:\$(getconf PATH)
>       exec $1 sh "\$@"
> 
> * thanks to zsh pathdirs, I can type t/sed to refer to toybox's sed.
> * I have this `toys` shell to test complete scripts
> 
> Rob said toybox will be nothing more, nothing less but an implementation
> of the POSIX standard (and I understand why)

No, it'll be what the Linux command line needs. Posix is insufficient, it
doesn't even have a "mount" command. It describes a "pax" command Linux has
never used (we did "tar" instead, and it produces binary-identical output to
gnu/tar including sparse file support and xattrs).

The https://landley.net/toybox/about.html and
https://landley.net/toybox/roadmap.html pages try to explain the reasoning, but
to be honest what should and should not be included is a sadly a big judgement
call beyond a few ground rules.

Lots of the command source comments have a "deviations from posix" section. You
mentioned sed, here's that command's section:

https://github.com/landley/toybox/blob/master/toys/posix/sed.c#L14

> which defines a function
> definition as
> 
>       fname () compound-command
> 
> https://pubs.opengroup.org/onlinepubs/9699919799/utilities/V3_chap02.html#tag_18_09_05
> 
> when a lot of shells (even dash) accept
> 
>       fname () command(compound or not)

Bash does not accept non-compound commands, and toysh is using "what bash does"
as its standard. On debian:

  $ x() echo hello;
  bash: syntax error near unexpected token `echo'

>       <<\. toys
>       for shell in zsh dash mksh oksh 'busybox sh' yash toys; do
>               $shell -c "f() echo $shell does; f"
>       done

So you tried everything _except_ bash.

> zsh does
> dash does
> mksh does
> oksh does
> busybox sh does
> yash -c:1: syntax error: a function body must be a compound command
> sh: toys: No such file or directory
> 
> If I want that feature, I need a first external dependency (i'll
> probably choose rc or [om]ksh) but is orthodoxy a strong value of toybox?

I don't know what you mean by orthodoxy in this context. It's not hard to add, I
literally didn't because bash didn't. No deeper reason.

> In another words: if I provide a patch to accept this grammar:
> 
>       fname () command
> 
> Is there a chance for it to be merged ?

Hey Chet: why doesn't bash accept non-compound commands as functions? I have
wondered. Apparently other shells disagree on this...?

Rob
_______________________________________________
Toybox mailing list
[email protected]
http://lists.landley.net/listinfo.cgi/toybox-landley.net

Reply via email to