Writing portable scripts

To write scripts that don't require to specify the full path to csi, the following technique might be useful:

 #! /bin/sh
 exec csi -s "$0" "$@"

Another approach would be to have a trampoline script that invokes csi with these contents:

 % cat runscheme
 exec csi -s $*

and use this header in your scheme script:

 #!/usr/bin/env runscheme

It should be noted that the following would not be portable

 #!/usr/bin/env csi -s

Because POSIX only requires the shebang command to accept one parameter (csi in this case) and -s might be ignored.