Embedded Shell Scripts in BusyBox
=================================

BusyBox allows applets to be implemented as shell scripts.  Since
this obviously requires a shell to interpret the scripts the feature
depends on having a shell built into the binary.  Either ash or hush
will do.  If both are present ash will be used.  Support for embedded
scripts also has to be enabled.

It's unlikely that your applet will be implemented as a pure shell
script:  it will probably need some external commands.  If these are
to be provided by BusyBox you'll need to ensure they're enabled too.

There are two ways to include scripts in BusyBox:  the quick-and-dirty
custom script and the full-featured scripted applet.

Custom Scripts
--------------

When embedded script support is enabled the BusyBox build process
assumes that any files in the directory 'embed' at the top level of
the source tree are scripts to be embedded.

The embed directory isn't present in the BusyBox source tree and
BusyBox itself will never put anything there:  it's entirely for the
use of third parties.

Adding a custom script is as simple as running the following sequence
of commands in the BusyBox source directory:

   mkdir embed
   echo 'echo foo' >embed/foo
   make defconfig
   make

The resulting binary includes the new applet foo!

Custom scripts have limited opportunities for configuration:  the only
control developers have is to put them in the embed directory, or not.
Everything else takes default values.  For more control you need the
additional features provided by scripted applets.

Scripted Applets
----------------

Suppose we want to make a shell script version of the sample applet
from the New Applet HOWTO.  First we'd have to write a script (vaguely)
equivalent to the C code:

   return $(($RANDOM%256))

This should be placed in the file applets_sh/mu in the source tree.

Next we need the configuration data.  This is very similar to the example
code for the native applet:

//config:config MU
//config:	bool "MU"
//config:	default y
//config:	help
//config:	Returns an indeterminate value.

//applet:IF_MU(APPLET_SCRIPTED(mu, scripted, BB_DIR_USR_BIN, BB_SUID_DROP, mu))

//usage:#define mu_trivial_usage
//usage:	"[-abcde] FILE..."
//usage:#define mu_full_usage
//usage:	"Returns an indeterminate value\n"
//usage:     "\n	-a	First function"
//usage:     "\n	-b	Second function"

The only difference is that the applet is specified as being of type
APPLET_SCRIPTED.  It would also be useful to include details of any
dependencies the script has.  No external commands are used by our mu
script, but it does depend on optional shell features.  We can ensure
these are selected by adding this to the configuration:

//config:config MU_DEPENDENCIES
//config:	bool "Enable dependencies for mu"
//config:	default y
//config:	depends on MU
//config:	select ASH_RANDOM_SUPPORT
//config:	select FEATURE_SH_MATH
//config:	help
//config:	mu is implemented as a shell script. It requires support
//config:	for $RANDOM and arithmetic.

The configuration data should be placed in a C file in an appropriate
subdirectory.  There isn't any C code, though!  In this case the file
could be miscutils/mu.c.

Scripted applets are just as configurable as applets written in C.
They can be enabled or disabled using the configuration menu; their
install directory can be specified and their usage messages are stored
along with those of all other applets.

Additional Notes
----------------

The source for embedded scripts can be displayed by running:

   busybox --show SCRIPT

This can be disabled by turning off FEATURE_SHOW_SCRIPT in the
configuration, though it won't prevent a determined user from
extracting the source code.

It can be argued that embedded scripts are linked into the BusyBox
binary and are therefore not subject to the 'mere aggregation'
exception in the GPL.  If this is the case embedded scripts should
have a licence compatible with BusyBox's GPL v2-only licence.
