Shell script vs command-line

I find that I get different behaviour when I execute certain commands
in shell scripts on my Neutrino target compared with executing at a
ksh shell prompt. Here is one such example.

When I execute the following command at the shell prompt:
mount -vvv -T io-net -o if=en0:192.168.0.230 /proc/boot/npm-ttcpip.so
the output is:

Parsed: mount from [npm-ttcpip.so] mount on [NULL] type [io-net]
exec: mount_io-net -o if=en0:192.168.0.230 -o nostat npm-ttcpip.so /
Failed with external mounts, trying internal mount
Type [io-net] Flags 0x80000000
Device [npm-ttcpip.so] Directory [/]
Options [if=en0:192.168.0.230]

Two devices are created: /dev/io-net/ip0 and /dev/io-net/ip_en
and TCP/IP works as expected. I then umount the devices.

When I put the exact same command into a file /hd0/sss and execute:
sh /hd0/sss
or
. /hd0/sss
I get the following output:

] mount on [NULL] type [io-net] o
/ec: mount_io-net -o if=en0:192.168.0.230 -o nostat npm-ttcpip.so
Failed with external mounts, trying internal mount
Type [io-net] Flags 0x80000000
] Directory [/] pip.so
Options [if=en0:192.168.0.230]
mount: Can’t mount / (type io-net)
mount: Possible reason: No such device or address

No devices are created in /dev/io-net, TCP/IP doesn’t work.

The verbose output from the script command appears to be somewhat garbled.
I’m also seeing garbling in error reports from simple commands like ‘echo’.

So what is different between command-line and script invocations?
Any hints much appreciated…