dash

Rocco Stanzione grasshopper at linuxkungfu.org
Thu Sep 14 20:06:09 BST 2006


I didn't catch the dialog that resulted in /bin/sh being linked to dash, and 
I've only found a wiki page and a spec (which seem to be identical) briefly 
stating the rationale.  I don't like it, and I'd like to say why.

I've come across a half-dozen or so 3rd-party scripts whose shebang lines say 
#!/bin/sh that don't work with dash.  The problems usually involve tests 
and/or subshell execution.  A number of patches have already gone into 
scripts exhibiting these problems in Ubuntu packages, and some packages 
(limewire recently reared its head) that are not available in Ubuntu of 
course cannot be patched and will likely be difficult for many to diagnose.

I kept quiet, though, figuring too many wheels had already started turning in 
that direction, until today when I tried to build iptables.  When I 
ran "make", the first line of output was:

[: 1: /usr/src/linux/include/asm: unexpected operator

caused by the line:

ifeq ($(shell [ -a $(KERNEL_DIR)/include/asm ] && echo YES), YES)

in the Makefile.
That's a pretty standard shell test, that also fails on the shell:

trappist at monk:~$ dash
$ [ -a /usr/src/linux/include/asm ] && echo YES
[: 1: /usr/src/linux/include/asm: unexpected operator

Other similar examples also fail:

$ if [ -a /usr/src/linux/include/asm ]; then echo YES; fi
[: 4: /usr/src/linux/include/asm: unexpected operator

http://www.opengroup.org/onlinepubs/000095399/utilities/test.html
The above URL shows other examples that should work with a POSIX-compliant 
shell and do not.  As far as I know, none of the scripts failing to work with 
dash have failed because the scripts were not POSIX-compliant, but because 
dash isn't.

Thanks,

Rocco



More information about the ubuntu-devel mailing list