On 10/27/2012 05:22:52 PM, Felix Janda wrote:
Hello,

attached are some simple tests for dirname and wc and
a fix for a small typo in another test script.

Cool.

Posix specifies an -m option for wc, which toybox does
not implement. Should there be a test for this, too?

That's internationalization support, which I haven't implemented yet.

I think toybox should support utf-8, but am not as interested in multiple translations and date formats and such. (Those belong at the GUI/X11 level.)

Why do the scripts actually use bash?

The tl;dr version is "dash was a mistake on Ubuntu's part".

The long version is that Linux was literally created to run Bash. Linux evolved out of a terminal program that Linus wrote in i386 assembly language (booting on the bare metal, from a floppy disk) because the OS he was using (Minix) couldn't keep up with a 2400 baud modem and he wanted to dial in to the university unix machine to read usenet message boards. He added the ability to read and write the minix filesystem so his term program could download files from usenet, and then he added the system calls necessary for it to run bash so he didn't have to boot back into minix to run "rm" and "mkdir" and such between downloads. (This is all in Linus's biography "Just for Fun", by the way.)

Bash was the first program Linux ever ran, and Bash remained the standard Linux shell on all Linux distros until Ubuntu made the single dumbest technical decision in its history. In Ubuntu 6.10, they redirected #!/bin/sh to point to dash instead of bash, because "the boot was too slow".

Yes, really:  https://wiki.ubuntu.com/DashAsBinSh

Rather than modify the boot scripts to say #!/bin/bash at the top (a change which was deemed 'too intrusive'), they changed the system default shell. This broke all sorts of stuff (such as the kernel build), but Ubuntu was the dominant distro at the time and could force the change down people's throats.

Note: Ubuntu didn't _stop_ installing bash by default. Bash was still there. They just added a second shell and redirected /bin/sh to point to that. So bash is still there if you say #!/bin/bash.

The Ubuntu developers then realized that it hadn't fixed the boot speed problem, and switched from system V init to upstart to get better parallelism, something they should have done in the first place and which rendered the change in #!/bin/sh moot. (Red Hat switched to systemd instead, and they've been fighting over it ever since. Upstart probably would have been able to shout down systemd if Ubuntu hadn't convinced everybody it had horrible technical judgement with dash.)

Meanwhile, dash doesn't support path/{file1,file2} syntax, it doesn't support "diff -u <(sort -u file1) <(sort -u file2)", and so on. Last I checked it didn't even support "set -o pipefail" which ksh and ash and such have supported for years.

Toybox's built in shell is not attempting to duplicate dash. It's doing a posix shell and then adding the bash extensions that make sense.

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

Reply via email to